Я делаю заявку с использованием инфраструктуры Yii2, и я не уверен, что все делаю правильно.
Вот действие от моего контроллера:
public function actionView($id)
{
$model = $this->findModel($id);
$pictures = new Pictures();
$upload = new UploadForm();
$views = new Views();
$contacts = $model->getContacts($model->user_id);
$contact = $model->contact($model->user_id);
$buttons = [
'update' => '',
'delete' => '',
];
$gallery = '_gallery';
$value = '';
if (!Yii::$app->user->isGuest) {
$isInBookmarks = Bookmark::find()->where([
'user_id' => Yii::$app->user->identity->getId(), 'advert_id' => $id
])->all();
if (!empty($isInBookmarks)) {
$value = 'Delete ' . 'from bookmarks';
} else {
$value = 'Add to bookmarks';
}
if ($model->user_id == Yii::$app->user->identity->getId()) {
$buttons['update'] = Html::a('Update advert', ['update', 'id' => $model->id], [
'class' => 'btn btn-primary'
]);
$buttons['delete'] = Html::a('Delete advert', ['delete', 'id' => $model->id], [
'class' => 'btn btn-danger',
'data' => [
'confirm' => 'Are you sure you want to delete this advert?',
'method' => 'post',
],
]);
if (isset($_POST['delete_pic'])) {
$model->deletePic();
}
$gallery = '_my-gallery';
}
}
$views->countViews($_GET['id']);
return $this->render('view', [
'model' => $model,
'contacts' =>$contacts,
'contact' =>$contact,
'value' => $value,
'buttons' => $buttons,
'pictures' => $pictures,
'gallery' => $gallery,
'upload' => $upload,
'views' => $views,
]);
}
И вот мой код просмотра:
<div class="date-update">
Last update: <?= date(Yii::$app->params['dateFormat'], $model->updated_at) ?>
</div>
<?= $this->render($gallery, [
'pictures' => $pictures,
'model' => $model,
'upload' => $upload,
]) ?>
Правильно ли создавать
$pictures = new Pictures();
а также
$upload = new UploadForm();
в контроллере и передать их два раза в файл вида, где я их использую, или мне лучше создать их прямо в файле вида? Что будет правильным в соответствии с принципами ООП и MVC?
Почему вы хотите создать их в файле представления?
Логика MVC состоит в том, чтобы отображать вещи только в файле вида. Вы никогда не должны делать что-либо еще во взглядах.
Если вам нужно взаимодействовать с вашим объектом Pictures, как вы это сделаете, если создадите объект в представлении?
Других решений пока нет …