我的$ model-> load(Yii :: $ app-> request-> post()返回布尔值(false)

时间:2019-05-11 08:04:39

标签: ajax yii2

谁能告诉我为什么我的$model->load(Yii::$app->request->post()返回布尔值(false)?我尝试使用var_dump $model->load(Yii::$app->request->post(),它肯定具有我的输入值(不为null)。

这是我的代码。我正在基于Vitalet's x-editable的可编辑输入字段上工作。该字段将修改数据库的tema列的值(tema的model属性)。我尝试在“ else”语句中print_r($model->getErrors()),我得到了   Array ( )

public function actionFetch(){
//There's only a single row in the table.
$model= Home::find()->one();

if (Yii::$app->request->isAjax) {

// use Yii's response format to encode output as JSON
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

// save posted model attributes
if ($model->load(Yii::$app->request->post()) && $model->save()) {

//extract the class name
$modelClassName = \yii\helpers\StringHelper::basename(get_class($model));
//grab the post parameters array (as attribute=>value)
$params = Yii::$app->request->post($modelClassName);
//pull the first value from the array (there should only be one) 
$value = reset($params);

// return JSON encoded output in the below format
return ['output'=>$value, 'message'=>'success'];

} else {
// else if nothing to do always return an empty JSON encoded output
// alternatively you can return a validation error
return ['output'=>'', 'message'=>'fail'];
}
};


}

视图:

<a href="#" id="tema" name="tema" data-type="text" data-pk=<?=$model->id?> data-url=<?=Url::to(['home/fetch']);?> data-title="Enter username"><?=$model->tema?></a>

我的模型规则:

public function rules()
    {
        return [
            [[ 'id','isiTema', 'image', 'midLeft_title', 'midLeft_content', 'midCenter_title', 'midCenter_content', 'midRight_title', 'midRight_content', 'footerLeft', 'footerRight', 'created_at', 'updated_at'], 'required'],
            [['midLeft_content', 'midCenter_content', 'midRight_content', 'footerLeft', 'footerRight'], 'string'],
            [['id'],'integer'],
            [['created_at', 'updated_at'], 'safe'],
            [['tema', 'isiTema', 'image', 'midLeft_title', 'midCenter_title', 'midRight_title'], 'string', 'max' => 255],
        ];
    }

这是我的var_dump(Yii::$app->request->post())包含的内容:

array(3) {
  ["name"]=>
  string(4) "tema"
  ["value"]=>
  string(5) "aaabb"
  ["pk"]=>
  string(1) "1"
}

我在控制器中尝试此操作,但结果仍然相同(基本上我认为不需要,因为它仅在表中包含一行):

...
 $pk = $_POST['pk'];

$model=Home::find()->where(['id'=>$pk])->one();
...
...

1 个答案:

答案 0 :(得分:2)

您需要使用load(),并将第二个参数设置为'',以明确声明您的POST字段不包括型号名称。

$model->load(Yii::$app->request->post(), '')