ffchen 2016-11-07 15:23:49 6192次浏览 1条评论 5 4 0

学习了下,如果自定义input表单,需要注意种情况

一、严格遵守yii规范情况

  1. input name = 模型名['数据库字段']
  2. $model->load(Yii::$app->request->post()),这种情况load的第二个参数无需设置

二、完全自定义

  1. input name 自己定义的(但是也要和数据字段一样)
  2. $model->load(Yii::$app->request->post(),''),这种情况load的第二个参数需要设置为 ''
    public function load($data, $formName = null)
    {
     // 如果第二个参数==null那么会调用模型类名(不含 namespace)执行【例2】代码
     //如果第二个参数==''那么执行【例1】代码
     $scope = $formName === null ? $this->formName() : $formName;
     //例1
     if ($scope === '' && !empty($data)) {
         // 如果 $scope 为空字符串,且 $data不为空,就设置属性
         // 即 $formName 为空字符串,且 $data不为空            
         $this->setAttributes($data);//其实这个地方是一个GTE/POST数组
         return true;
    //例2
     } elseif (isset($data[$scope])) {
         // 否则,必须存在 $data[$scope],使用 $data[$scope] 去设置属性            
         $this->setAttributes($data[$scope]);
         //return true;
     } else {
         //如果啥也不是返回false
         return false;
     }
    }
    

关于csrf的问题,可以关闭也可以直接Yii::$app->getRequest()->getCsrfToken();加上

另外关于关闭csrf,还有一种方法在当前控制器关闭该方法public $enableCsrfValidation = false;

觉得很赞
  • 评论于 2017-11-15 18:56 举报

    自定义表单,是不可以用模型的验证规则的吗?如果想使用,有什么解决方案吗?

您需要登录后才可以评论。登录 | 立即注册