drodata
- drodata 回答了问题 如何根据搜索条件生成不同的表
一个思路,抛砖引玉:借助 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
就能获取所有所需的信息。- drodata 回答了问题 求推荐一个加标签的插件
- 区别:ActiveQuery 返回的是 AR 实例, Query 查询结果返回的是普通数组;
- 关系:ActiveQuery 基于 Query, 所以后者更直接、更快;
- 场景:Query 适合在 console controllers, migration 内使用;ActiveQuery 功能丰富,返回的实例能直接使用属性、事件和行为等组件核心特性;
- drodata 发布了话题打标签插件 Tagify 介绍
- drodata 回答了问题 Yii2 模态框表单异步提交
你的问题可以分成两部分:一是在 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 值找到这一行,再在对应标签元素上更新值就行了。另外:
enableAjaxValidation
属性是本地验证表单,只设置这个不能达到异步提交表单。- GridView 中单元格快速编辑可以使用 https://github.com/kartik-v/yii2-editable
- drodata 回复了 不求而得的往往求而不得 的回答
用select2插件可以吗,它有个tags属性,设置为true是标签模式。
Select2 能工作但体验不太理想。我每新增一个标签,不得不按下两次回车键才能输入下一个标签。
- drodata 提出了问题求推荐一个加标签的插件