yii2 как передать во вью из контроллера переменную которая может быть null

212
27 августа 2021, 12:10

При рендеринге вида возникает ошибка Call to a member function isAttributeRequired() on null. Контроллер:

        $modelFile = $this->findFileModel($id);
    return $this->render('update', [
        'id' => $id,
        'model' => $form,
        'candidate' => $candidate,
        'modelFileWidget'=> new \frontend\models\UploadForm(),
        'modelFile' => $modelFile,
        'cities'=> ArrayHelper::map($this->cityService->getAll(),'id','name'),
        'skills'=> ArrayHelper::map($this->skillService->getAll(),'id','name'),
    ]);

Функция которая находит модель по заданному id:

    private function findFileModel($id)
{
    return \common\models\File::find()->where('entity_id = :entity_id', ['entity_id' => $id])->one();
}

Функция может возвращать null.Как в этом случае передать переменную $modelFile в метод render? Спасибо.

Answer 1

если хочется обрабатывать наличие обновляемого объекта, то нормальное решение. а стандартный вариант выглядит так:

/**
 * Updates an existing Theme model.
 * If update is successful, the browser will be redirected to the 'view' page.
 * @param integer $id
 * @return mixed
 * @throws NotFoundHttpException if the model cannot be found
 */
public function actionUpdate($id)
{
    $model = $this->findModel($id);
    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['index']);
    }
    return $this->render('update', [
        'model' => $model,
    ]);
}

/**
 * Finds the Theme model based on its primary key value.
 * If the model is not found, a 404 HTTP exception will be thrown.
 * @param integer $id
 * @return Theme the loaded model
 * @throws NotFoundHttpException if the model cannot be found
 */
protected function findModel($id)
{
    if (($model = Theme::findOne($id)) !== null) {
        return $model;
    }
    throw new NotFoundHttpException('The requested page does not exist.');
}

Если нет объекта то вываливается стандартная ошибка. Или можно сделать редирект. Если выдать ошибку не вариант. можно передать пустую модель

protected function findModel($id)
{
    if (($model = ModelClass::findOne($id)) !== null) {
        return $model;
    }
    return new ModelClass();
}
READ ALSO
В обход dependency injection symfony

В обход dependency injection symfony

Потихоньку осваивая symfony 4 возникли недопониманияИмеется абстрактный репозиторий в который inject-ица некий DriverManager объект-коннекшн к базе...

324
Map-merge при наличии List в качестве значений

Map-merge при наличии List в качестве значений

Задача следующая - есть мапа, которая хранит в себе Id и связанный с ним список значений

172
Почему программа работает медленно?

Почему программа работает медленно?

Написал программуПрограмма выполняет все поставленные задачи, кроме одной, она должна выполнятся за 1 секунду, но выполняется за 4, подскажите,...

128
Android, Refrofit. Как разобрать JSON с неизвестным ключом?

Android, Refrofit. Как разобрать JSON с неизвестным ключом?

У меня такой вопрос, как разобрать json с неизвестным ключом? https://acxio//api/v2/tickers

147