Мой $ model-> load (Yii :: $ app-> request-> post () возвращает логическое значение (false) - PullRequest
0 голосов
/ 11 мая 2019

Может кто-нибудь сказать, почему мой $model->load(Yii::$app->request->post() возвращает логическое значение (false)?Я пытаюсь использовать var_dump $model->load(Yii::$app->request->post(), и в нем определенно есть мое входное значение (не ноль).

Вот мой код.Я работаю над редактируемым полем ввода на основе Vitalet's x-editable.В этом поле будет изменено значение столбца tema базы данных (атрибут модели tema).Я пытаюсь print_r($model->getErrors()) в выражении 'else' и получаю 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 Ответ

2 голосов
/ 11 мая 2019

Вам необходимо использовать load() со вторым аргументом, установленным на '', чтобы явно указать, что ваши поля POST не включают название модели.

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