Jeen
- Jeen 发布了教程Url Rules 使用指南
可以使用 ArrayDataProvider 建议看下源码
样例代码如下
public function actionIndex() { $dataProvider = new ArrayDataProvider(); $dataProvider->setModels([ ['id'=>1,'name'=>'john'], ['id'=>2,'name'=>'tom'], ]); return $this->render('index',[ 'dataProvider' => $dataProvider, ]); }
数组的键名即对应 数据表的字段名。 试试看吧 :)
- Jeen 回答了问题 yii2.0资源管理问题
视图源码呢? 贴出来看看
猜测应该是你的视图文件不完整,不管你是否需要layout模版。
使用框架渲染视图,需要符合一定的规范如<?php $this->beginPage() ?> <!DOCTYPE html> <html lang="<?= Yii::$app->language ?>"> <head> <meta charset="<?= Yii::$app->charset ?>"> <title><?= Html::encode($this->title) ?></title> <?php $this->head() ?> </head> <body> <?php $this->beginBody() ?> <?= $content;//不需要模版时, 替换为 具体视图的代码 ?> <?php $this->endBody() ?> </body> </html> <?php $this->endPage() ?>
有兴趣研究源码的话,推荐看看
$this->head()
部分的源码 - Jeen 回答了问题 求分享本站修改头像的yii2插件
可以参考下这个
https://github.com/org-yii-china/yii2-avatar
跟这个站的操作样式不完全一样,不过用的 是同一个 js 组件 cropper.js
- Jeen 回答了问题 在表单修改时,怎么给下拉框加上默认选中
两种方式
//方法1 直接给模型赋初值 if ($model->getIsNewRecord()) { $model->type = 3; } echo $form->field($model,'type')->dropDownList([1=>'111',2=>'222',3=>'333']); //方法2 同楼上 echo $form->field($model,'type')->dropDownList([1=>'111',2=>'222',3=>'333'],['prompt' => 3,]);
测试模型
User
//... public function getCount() { return $this->hasOne(UserCount::class, ['user_id' => 'id']); } public function getSetting() { return $this->hasMany(UserSetting::class, ['user_id' => 'id']); } //...
测试代码
echo User::find() ->joinWith('count as a') ->joinWith('setting as b') ->createCommand() ->getRawSql();
输出sql
SELECT `user`.* FROM `user` LEFT JOIN `user_count` `a` ON `user`.id = a.user_id LEFT JOIN `user_setting` `b` ON `user`.id = b.user_id
仅供参考 :)
另外,如果我把第一条规则去掉了,第二条规则也有个问题,就是参数刚刚好 就是defaults里的那些默认值,那么伪静态就失效了
留意下
UrlRuleWeb
自定义类中的createUrl 方法的源码
有一部分是根据个人需求定制的//400 行左右 if ($_default_count == count($this->_paramRules)) { $this->createStatus = self::CREATE_STATUS_PARAMS_MISMATCH; return false; } //这边 个人为了防止 "无参情况下,都使用默认值" 的情况,加了一个判断条件 //根据你的需求 把这个判断条件删除掉 应该就可以满足了 //如果希望两条规则同时使用 ,可以在第一条中指定类名,然后修改这个判断条件如下 if ($_default_count > 0 && $_default_count == count($this->_paramRules)) { $this->createStatus = self::CREATE_STATUS_PARAMS_MISMATCH; return false; } //测试配置如下 [ 'class' => UrlRuleWeb::class, 'pattern' => 'product', 'suffix' => '.do',//自定义后缀 可选配置 'route' => 'article/product', ], [ 'class' => UrlRuleWeb::class, 'pattern' => 'product_<filter_1:\d+>_<filter_4:\d+>_<filter_7:\d+>_<filter_12:\d+>_<page:\d+>', 'route' => 'article/product', 'suffix' => '.html',//自定义后缀 可选配置 'defaults' => [ 'filter_1' => 0, 'filter_4' => 0, 'filter_7' => 0, 'filter_12' => 0, 'page' => 1 ], ], //写法2
由于是根据项目需求定制,难免会有差异
欢迎补充 各种场景下的处理方案 :)你使用的已经是
$form->field($model, 'attribute');
的形式了,应该清楚模型更新方式的吧。。。
片段代码如下$model = $this->findModel($id); if($model->load(\Yii::$app->getRequest()->post())) { $model->name = trim($model->name); //... 一些自定义逻辑 $model->save(); //保存 }
可以参考Gii 生成的 CRUD 中 update的源码
@xiaochuanworld 首先你需要明确 post 的值有哪些,取不到id 的问题有很多种 1、post表单中没有 2、Sysmenu 中没有配置 id 的过滤规则,即rules中无相关设置 3、其它
另外 修改成功, 但是数据没有变化, 说明值没有变更 或者 赋值失败。
猜测问题出现在 Sysmenu 模型 rules 设置中的可能性比较大。
建议多测试测试吧, 看不到具体代码,猜测沟通起来都比较难- Jeen 回答了问题 请教一下路由规则的参数如何给它定义为可不传呢?
- Jeen 回答了问题 urlManager::$rules 用法问题
之前也踩过一些坑,关于这个问题整理了一篇文章。可以看看