谁能告诉我为什么我的$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();
...
...
答案 0 :(得分:2)
您需要使用load()
,并将第二个参数设置为''
,以明确声明您的POST字段不包括型号名称。
$model->load(Yii::$app->request->post(), '')