drodata

drodata

这家伙有点懒,还没写个性签名!

  • 财富值1760
  • 威望值310
  • 总积分5350

个人信息

  • 一个思路,抛砖引玉:借助 DataColumn visible 属性控制表格列的可见性。

    /* @var $searchModel SkuSearch */
    
    use yii\helpers\ArrayHelper;
    use yii\grid\GridView;
    
    
    echo GridView::widget([
        // ...
        'columns' => [
            [
                'attribute' => 'a',
                'visible' => $searchModel->a == 'foo',
            ],
            [
                'attribute' => 'b',
                'visible' => !$searchModel->b,
            ],
        ],
    ]);
    
  • 你把简单的问题搞复杂了。 RESTfull 获取关联表信息通过配置 extraFields() 就能实现,不必使用 with(), joinWith(), 更不必使用 asArray(), REST apis 有一套自己的处理逻辑。

    你声明的 getAllLines() 方法在哪调用?你上面的 JSON 输出对应的 url (endpoint) 又是什么?

  • ActiveRecord fields() 和 extraFields() 内能直接使用关系名称。以你的例子为例,'creator', 'forum' 和 'comments' 都是 Post 的关系名称,可以像表格列名(attribute)那样直接使用:

    // Post Model
    public function fields()
    {
        return [
            'title',
            'content',
            ...,
            'creator' => function ($model) {
                return [
                    'id' => $model->creator->id,
                    'username' => $model->creator->username,
                    'avatar' => $model->creator->getFullAvatar()
                ];
            },
            'forum' => function ($model) {
                return [
                    'id' => $model->forum->id,
                    'name' => $model->forum->name
                ];
            },
    
            // 直接返回关系名称
            'comments'
        ];
    }
    

    然后在 Comment 模型的 fields() 内进一步指定所需的 fields:

    // Comment Model
    public function fields()
    {
        return [
            'title',
            'content',
            'creator' => function ($model) {
                return [
                    'id' => $model->creator->id,
                    'username' => $model->creator->username,
                    'avatar' => $model->creator->getFullAvatar()
                ];
            },
        ];
    }
    

    通过 posts/1 就能获取所有所需的信息。

    • 区别:ActiveQuery 返回的是 AR 实例, Query 查询结果返回的是普通数组;
    • 关系:ActiveQuery 基于 Query, 所以后者更直接、更快;
    • 场景:Query 适合在 console controllers, migration 内使用;ActiveQuery 功能丰富,返回的实例能直接使用属性、事件和行为等组件核心特性;
  • 发布了话题
    打标签插件 Tagify 介绍
  • 你的问题可以分成两部分:一是在 Modal 内 ajax 提交表单;二是表单提交成功后的交互。前者文档中有讲过 (https://www.yiiframework.com/doc/guide/2.0/en/input-form-javascript#submitting-the-form-via-ajax), 后者使用 JS 操作 DOM, 跟 Yii 没啥关系。关闭 Modal 使用 .modal('hide'), 只刷新当前记录也简单, GridView 生成的每一行内都有当前记录的 key 值:<tr data-key="11725"> 根据 key 值找到这一行,再在对应标签元素上更新值就行了。

    另外:

  • 用select2插件可以吗,它有个tags属性,设置为true是标签模式。

    Select2 能工作但体验不太理想。我每新增一个标签,不得不按下两次回车键才能输入下一个标签。

  • 提出了问题
    求推荐一个加标签的插件
副总裁 等级规则
5350/10000
资料完整度
50/100
用户活跃度
0/100

Ta的关注

6

Ta的粉丝

15

Ta的访客

63