У меня есть очень простой мастер -> подробно соотношение:Как я могу избежать использования findOne в действии каждого контроллера?
связь: Клиент (1) ---> (п) Комментарии
У меня есть мой контроллер, но в некоторых действиях, я продолжайте повторять модель поиска с ассоциированным идентификатором и бросая какое-то исключение, если не нашли.
class ClientController extends \yii\web\Controller{
public function actionViewComment($id) {
$model = Comment::findOne($id);
if ($model == null)
throw new NotFoundHttpException('The requested page does not exist.');
return $this->render('view-comment', ['model' => $model]);
}
public function actionEditComment($id) {
$model = Comment::findOne($id);
if ($model == null)
throw new NotFoundHttpException('The requested page does not exist.');
$model->scenario = 'update';
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view-comment', 'id' => $model->id]);
} else {
return $this->render('edit-comment', ['model' => $model]);
}
}
}
я могу создать метод Model (findOrThrows), чтобы найти или бросить исключение, но все-таки я должен использовать его в половине моих действий контроллера (вероятно, может быть больше, как приложение растет). Мне было интересно, есть ли лучший способ сделать это? Какой-то глобальный объект, который становится доступным на основе Маршрута и Идентификатора, так что Контроллер (или Вид) может его использовать?
Великий, но в предложенном пути я могу работать только с одной модели каждого контроллера , В моем случае ClientController (надеюсь) понадобится как минимум 3 модели в ближайшем будущем. Я пытался что-то сделать на уровне правил в web.php: ''rules' => ['pattern' => 'client/', 'route' => 'client/show', 'defaults' => [ 'comments' => Комментарии :: findOne ($ id)]] ', но он терпит неудачу. После некоторого тестирования и угадывания я предполагаю, что переменная $ id не существует на данный момент в приложении (используя это как мою ссылку: http://www.yiiframework.com/doc-2.0/guide-runtime-overview.html). Любые другие идеи, пожалуйста? –