• Yii2学习笔记---内附GridView配置总结


    1、/vendor/yiisoft/yii2/web/UrlManager.php 方法createUrl 修改url参数转码
    2、config/web.php 配置文件Yii::$app(应用主体)的相关参数/注册应用组件
    3、Model验证器 方法rules()

    4、advanced安装
      下载压缩包并解压到blogdemo2
      cmd进入blogdemo2
      ~$ php init
      ~$ 0
      ~$ yes
      安装成功
      新建数据库blogdemo2
      /common/config/main-local.php 配置数据库信息
      cmd:~$ php yii migrate 建表user、migration
        ~$ yes
    5、advanced模板解决了多人开发配置文件冲突的问题
    6、Mode:模型
      model可以继承yiidbActiveRecord(数据库字段为类属性),也可以继承yiiaseModel(需指定类的成员属性)
      beforeSave的写法。。。
    7、视图层
      DetailView:
        /blogdemo2/backend/views/post/view.php 这是有测试列子 author status(外键关联)
        格式设置:参考手册->yiiwidgets->DetailView->$attributes->yiii18nFormatter->method去掉as就是相关的格式
      ListView:
      GridView:
        https://blog.csdn.net/abei2017/article/details/80693024

     GridView配置总结   

    <?= GridView::widget([
            'dataProvider' => $dataProvider,
            'filterModel' => $searchModel,
    //         'tableOptions' => ['name'=>'tabalse'],//table 属性
            'filterRowOptions'=>['class' => 'filters'],//搜索框的class
            'headerRowOptions' => ['class'=>'abc'],//排序行的属性
            'id' => 'idss',//设置table外的div的id
            'options' => ['name' => 'options'],//设置table外的div的属性
            'pager' => [//分页样式调整
                'activePageCssClass'=>'active',
                'options' => ['class' => 'pagination'],
            ],
            'showFooter' => false,//是否显示tfoot
            'placeFooterAfterBody' => false,
            'rowOptions' => ['name'=>'rowOptionsss'],//给每个tr加属性
            'showHeader' => true,//是否显示表头(搜索行与th行)
            'layout' => "{summary}
    {items}
    {pager}",//板块//layout有5个值,分别为{summary}、{errors}、{items}、{sorter}和{pager}。
            'summary' => "{begin}-{end}-{count}-{totalCount}-{page}-{pageCount}",//数据的相关信息,行,页面,总数等
            'summaryOptions' => ['class' => 'summarys'],
            'afterRow' => function ()//每一行渲染后执行的方法
            {
    //             return '<td>111</td>';
            },
            'beforeRow' => function ()//每一行渲染前执行的方法
            {
    //             return '<td>222</td>';
            },
            'caption' => '表格的标题',//表格的标题
            'captionOptions' => ['class'=>'capClass'],//表格的标题的html标签属性设置
            'emptyCell' => '<p>null</p>',//单元格数据为空时显示的内容
            'emptyText' => 'emptyText',//$dataProvider为空时显示的内容
            'columns' => [//设置的列(字段)
    //             ['class' => 'yiigridSerialColumn'],//序号列
                [
                    'attribute'=>'id',
                    'contentOptions'=>['width'=>'30px'],
                ],
                'title',
                [
                    'attribute'=>'authorName',
                    'label' => '作者',
                    'value'=>'author.nickname',
                ],
    //             'content:ntext',
                'tags:ntext',
                [
                    'attribute'=>'status',
                    'value'=>'status0.name',
                    'filter'=>Poststatus::find()
                        ->select(['name', 'id'])
                        ->orderBy('position')
                        ->indexBy('id')
                        ->column(),
                ],
                //'create_time:datetime',
    //             'update_time:datetime',
                [
                    'label' => '修改时间',
                    'attribute'=>'update_time',
                    'value' => function ($data) {
                        return date('Y-m-d H:i:s',$data->update_time);
                    },
                ],
    
                [
                    'class' => 'yiigridActionColumn',
                    'template' => '{view}{update}{delete}{approve}',
                    'buttons' =>[
                        'approve' => function ($url, $model, $key)
                        {
                            $options = [
                                'title' => Yii::t('yii', '审核'),
                                'arid-label' => Yii::t('yii', '审核'),
                                'data-confirm' => Yii::t('yii', '你确定要通过这条评论吗?'),
                                'data-method' => 'post',
                                'data-ajax' => '0',
                            ];
                            return Html::a('<span class="glyphicon glyphicon-check"></span>', $url, $options);
                        }
                    ],
                ],
            ],
        ]); ?>

      ActiveForm:
        参考手册->yiiwidgets->ActiveForm->field()->yiiwidgetsActiveField 或 参考手册->yiiwidgets->ActiveField
        yiigridActionColumn:列表操作功能

    8、yii连接不同的数据库
      'dsn' => 'mysql:host=localhost;dbname=blogdemo2db',//mysql
      'dsn' => 'sqlite:/path/to/database/file',//sqlite
      'dsn' => 'pgsql:host=localhost;port=5432;dbname=mydatabase',//postgreSQL
      'dsn' => 'oci:dbname=//localhost:1521/mydatabase',//oracle
    9、数据查询:(三种方式)
      Command:(return Array)不常用,不推荐
        Yii::$app->db->createCommand('SELECT * FROM post')->queryAll();

        $post = Yii::$app->db->createCommand('SELECT * FROM post  where id=:id and status=:status')
          ->bindValue(':id', $id)
          ->bindValue(':status', 2)
          ->queryOne();
      AR:(return Object)常用,推荐;
        一个AR类关联一张数据表,每个AR对象对应表中的一行;
        AR对象的属性对应为数据行的列;
        可以直接以面向对象的方式来操纵数据库中的数据,这样就不需要写SQL语句就能实现数据库的访问
        Post::find():yiidbActiveRecord类中的方法;该方法调用的ActiveQuery

        查询:
          $model = Post::find()->where(['id' => 32])->one();//Post::findOne(1);//主键为1的
          $model = Post::find()->where(['status' => 2])->all();//Post::findAll(['status'=>2]);
          $model = Post::find()->where(['AND',['status'=>2],['author_id'=>1],['like','title','yii']])->orderBy('id')->all();
        插入:
          $postMode = new Post();
          $postMode->title = 't';
          $postMode->content = 'contentcontentcontentcontent';
          $postMode->status = 1;
          $postMode->author_id = 1;
          $postMode->save();
        更新:
          $model = Post::findOne(32);
          $model->title = 'Yii2小部件详解32323232';
          $model->save();
        删除:
          $model = Post::findOne(32);
          $model->delete();

      findBySql:(属于AR类)
        $sql = 'SELECT * FROM post WHERE status=2';
        $post = Post::findBySql($sql);
      QueryBuilder:(查询构造器return Array)
        $rows = (new yiidbQuery())
          ->select(['id', 'email'])
          ->from('user')
          ->where(['id'=>1])//->where("status=:status")->addParams([':status'=>$status])
          ->orderBy(id)
          ->limit(10)
          ->indexBy(id)//调用all的时候id的值做为数组的key,而不是默认为索引数组
          //->join('LEFT JOIN', 'post', 'post.user_id = user.id')
          ->all();

        $rows->union($rows2);//联合查询
    10、小助手:
      $this->redirect(['view', 'id'=>32]);//跳转到本controll中的其他方法
      Html类: /vendor/yiisoft/yii2/helpers/BaseHtml.php 参考手册->yiihelpersBaseHtml
      ArrayHelper类:/vendor/yiisoft/yii2/helpers/BaseArrayHelper.php 参考手册->yiihelpersArrayHelper
    11、相关类的继承(以派生的模式显示)
                               |-- 》commonmodelsLoginForm.php
    yiiaseBaseObject--》yiiaseComponent--|--》yiiaseModel》yiidbBaseActiveRecord》yiidbActiveRecord》相关业务Model
                        |--》yiidbQuery》yiidbActiveQuery《-------------------|find()
                             |--》yiidbCommand

    12、登录、ACF(用户与游客访问控制)、RBAC

      后台登录:
        复制表user为adminuser
        backend/config/main.php 'identityClass' => 'commonmodelsUser', 改为 'identityClass' => 'commonmodelsAdminuser',
        gii生成Adminuser.php Model /common/models
        backend/controllers/SiteController.php 中 的方法actionLogin中修改 $model = new LoginForm(); 为 $model = new AdminLoginForm(); 并引用命名空间use commonmodelsAdminLoginForm;
        common/models 复制文件 LoginForm.php 为 AdminLoginForm.php
        AdminLoginForm.php 修改:
          类名修改
          添加设置属性方法
            public function attributeLabels()
            {
              return [
                'username' => '用户名',
                'password' => '密码',
                'rememberMe' => '记住密码'
              ];
            }
          方法validatePassword中 'Incorrect username or password.' 改为 '用户名或密码错误。'
          方法getUser中 $this->_user = User::findByUsername($this->username); 改为 $this->_user = Adminuser::findByUsername($this->username);
        修改 /common/models/Adminuser.php
          添加接口继承IdentityInterface(记得引入命名空间)
          从/common/models/User.php中复制13个方法过来,findIdentity()......removePasswordResetToken()
          删除STATUS_ACTIVE的相关
        配置不同的cooike /backend/config/main.php 'cookieValidationKey' =>'sdfjjksloeedf78789judf',

      ACF: 查看/backend/controllers/PostController.php中的behaviors方法

      RBAC:
        配置common/config/main.php
          'components' => [
            'cache' => [
              'class' => 'yiicachingFileCache',
            ],
            'authManager' => [
              'class' => 'yii bacDbManager'
            ],
          ],
        控制台cmd(创建相关权限表auth_rule、auth_item_child、auth_item、auth_assignment)
          ~$ cd blogdemo2
          ~$ yii migrate --migrationPath=@yii/rbac/migrations
            ~$ yes
        *相关表的解释
          auth_item: 存储角色名(组)和权限(操作)
          auth_item_child: 角色有哪些权限,该表数据存在于auth_item表的name字段
          auth_assignment: 角色与用户的关系
        创建控制台文件RbacController.php
        ~$ yii rbac/init #给权限相关表添加权限数据
        相关方法添加权限判断
          if (!Yii::$app->user->can('createPost')){
            throw new ForbiddenHttpException('对不起,你没有进行该操作的权限。');
          }
        权限操作: backend/controllers/AdminuserController.php 添加 actionPrivilege方法

    weixi 123456
    weixi_member 123456
    C:UsersLiHailongDocumentsGitHublogdemo2

    If the copyright belongs to the longfei, please indicate the source!!!
  • 相关阅读:
    MinGW-编译器
    Enum , Enum Class ?
    C++编译器之间的不同性能
    交叉验证
    经验风险最小化-结构风险最小化
    图像卷积
    pytorch官网上两个例程
    ORB feature(O for orientation)
    Catalan数
    无责任共享 Coursera、Udacity 等课程视频(转载)
  • 原文地址:https://www.cnblogs.com/longfeiPHP/p/9851079.html
Copyright © 2020-2023  润新知