Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> MVC и Yii2., Нужна помощь в понимании
clocwerk  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 36
Пользователь №: 41868
На форуме: 1 год, 2 месяца, 10 дней
Карма: 1




Здравствуйте, последнее время работаем с yii2, и вот заметил такую вещь, во многих вьюхах yii2 используем примерно такой код:

<?= $form->field($model, 'post_id')
->
dropDownList(ArrayHelper::map(\common\models\Posts::find()->all(), 'id', 'name_short')) ?>

Т.е. получается обращаемся к модели Posts из вью. Всю жизнь считал что по идеологии MVC, вью вобще ничего не должна знать о модели, т.е. например вот эту часть:
ArrayHelper::map(\common\models\Posts::find()->all(), 'id', 'name_short')

нужно вынести в контроллер, но если так, то получиться большой толстый контроллер, потому что не только модель Posts так используется, а собственно все методы $form, напрмер dropDownList, radioList, checkBoxList и т.д.
Как вы считаете как правильно нужно делать? С одной стороные нарушать принципы mvc, а с другой создавать огромные контроллеры?
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 2 дня
Карма: 70




Всю жизнь считал что по идеологии MVC, вью вобще ничего не должна знать о модели

В идеале да.
Вообще MVC придумано для возможности повторного использования частей кода.
Что бы например взять этот шаблон и отобразить его с другими данными, в другом контроллере.
Если так сделать нельзя, тогда неправильно. Хотя из этих двух строчек сложно понять общую картину, может это вообще такой микросервис, который сам отвечает за свои данные и их оформление.



--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
cheevauva  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









clocwerk, в вебе можем быть разная интерпретация MVC, иногда V может иметь доступ к модели, но не иметь доступ к C. В твоём же примере тупо протёкщие абстракции.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 8 месяцев, 26 дней
Карма: 15





class PostController extends \yii\web\Controller {
public function actionIndex() {
...
$posts = \common\models\Posts::find()->all();

return $this->render('view', [
...

'model' => $model,
'posts' => $posts,
]);

}
}


$form->field($model, 'post_id')
->
dropDownList(ArrayHelper::map($posts, 'id', 'name_short'));


Чтобы не создавать огромные контроллеры нужно проектировать многослойную архитектуру используя например DDD. В MVC нет выбора куда писать все выборки данных из моделей. Вариантов немного или в контроллер (лучше) или в вью (хуже). Некоторые делают MVC + Services и пишут их в сервисы, в контроллере вызывают метод сервиса. Контроллер получается тонкий, а сервис толстый. Но этот подход не решает проблемы, она осталась, просто переехала в другой класс. Чтобы её действительно решить, а не скрыть, нужно что-то читать про многослойные архитектуры.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Another Reality  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 124
Пользователь №: 41606
На форуме: 1 год, 4 месяца, 17 дней
Карма: 5




Насколько я знаю, в ситуациях, когда вьюшка "активная" и запрашивает данные у модели, они должны возвращаться через контроллер.
Иначе, такое построение начинает походить на попытку перекостылить MVC в MVVM.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Мальтиец  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 1
Пользователь №: 43515
На форуме: 1 месяц, 10 дней
Карма:




Цитата
. Всю жизнь считал что по идеологии MVC, вью вобще ничего не должна знать о модели,

Что, тут - $form->field($model, 'post_id') - совсем уж ничего не знает о модели? А завязка на имени поля post_id?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса