Jeen

Jeen

难得糊涂

  • 财富值1120
  • 威望值190
  • 总积分3200

个人信息

  • 发布了教程
    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,
            ]);
        }
        
    

    数组的键名即对应 数据表的字段名。 试试看吧 :)

  • 视图源码呢? 贴出来看看

    猜测应该是你的视图文件不完整,不管你是否需要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() 部分的源码

  • 可以参考下这个

    https://github.com/org-yii-china/yii2-avatar 
    

    跟这个站的操作样式不完全一样,不过用的 是同一个 js 组件 cropper.js

  • 两种方式

    //方法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的源码

    首先你需要明确 post 的值有哪些,取不到id 的问题有很多种 1、post表单中没有 2、Sysmenu 中没有配置 id 的过滤规则,即rules中无相关设置 3、其它
    另外 修改成功, 但是数据没有变化, 说明值没有变更 或者 赋值失败。
    猜测问题出现在 Sysmenu 模型 rules 设置中的可能性比较大。
    建议多测试测试吧, 看不到具体代码,猜测沟通起来都比较难

  • 在你最新的问题中沟通过。不知道你的问题解决了没

    关于URL路由规则的配置,整理了一篇文章。可以看看 :)

    站内链接 http://www.yiichina.com/tutorial/1555

    博客链接 http://blog.jeen.wang/yii2-url-rule-usage.html

  • 之前也踩过一些坑,关于这个问题整理了一篇文章。可以看看

    站内链接 http://www.yiichina.com/tutorial/1555

    博客链接 http://blog.jeen.wang/yii2-url-rule-usage.html

总监 等级规则
3200/5000
资料完整度
50/100
用户活跃度
0/100

Ta的关注

0

Ta的粉丝

9

Ta的访客

42