Всем привет!
Имеются модели: ProjectCategory hasMany Project. К каждой модели есть Controller с CRUD. Задача - вывести записи модели ProjectCatagory в виде бокового меню, модели Project в виде контента. Первоначально думал, что можно из view "панели" отрендерить actionIndex каждого контроллера, но много где пишут что рендерить action из view - неправильно и это нарушает MVC. Как в таком случае лучше вывести каждое представление в одном View/Layout?
Лучший способ панельного интерфейса
Лучший способ панельного интерфейса
Ответственные программисты с высоким уровнем технического долга (c)
Re: Лучший способ панельного интерфейса
какие-то панели...
видимо речь идет о виджетах.
видимо речь идет о виджетах.
Re: Лучший способ панельного интерфейса
>>какие-то панели...
Возможно не совсем точно выразился, но речь по-моему не о виджетах. Виджет - компонент многоразового использования, а мне интересно, как вывести данные из двух контроллеров в одном view.
| тут ProjectCategory | тут Projects |
Или это обязательно должен быть один view одного контроллера с 2мя моделями?
Допустим SiteController.php
- так если делать через контроллер и использовать при рендеринге 2 модели. Как НЕ использовать две модели, а отрендерить уже имеющиеся actionIndex уже имеющихся контроллеров CRUD для этих моделей? Или правильно использовать именно 2 модели при рендеринге в одном контроллере.
Через AJAX я бы запросил indexAction каждого из контроллеров и отрендерил результат в одном view, каждый в своем месте. Вопрос, как правильно сделать тоже самое, но без AJAX?
Возможно не совсем точно выразился, но речь по-моему не о виджетах. Виджет - компонент многоразового использования, а мне интересно, как вывести данные из двух контроллеров в одном view.
| тут ProjectCategory | тут Projects |
Или это обязательно должен быть один view одного контроллера с 2мя моделями?
Допустим SiteController.php
Код: Выделить всё
return $this->render('index', [
'modelProjectCategory' => $modelProjectCategory,
'modelProjects' => $modelProjects,
]);
Через AJAX я бы запросил indexAction каждого из контроллеров и отрендерил результат в одном view, каждый в своем месте. Вопрос, как правильно сделать тоже самое, но без AJAX?
Последний раз редактировалось nickdenry 2015.12.23, 03:00, всего редактировалось 1 раз.
Ответственные программисты с высоким уровнем технического долга (c)
Re: Лучший способ панельного интерфейса
вам надо понять саму концепцию. Вам нужно вывести не данные из двух контроллеров (данные - это данные, а контроллеры - это банально путь из адресной строки), а просто данные. То есть изначально у вас есть данные и вы хотите иметь возможность выводить их в разных местах.nickdenry писал(а):>>какие-то панели...
Возможно, не совсем точно выразился, но речь по-моему не о виджетах. Виджет - компонент многоразового использования, а мне интересно, как вывести данные из двух контроллеров в одном view.
| тут ProjectCategory | тут Projects |
Или это обязательно должен быть один view одного контроллера с 2мя моделями? Через AJAX я бы запросил index каждого из контроллеров и отрендерил результат в одном view, каждый в своем месте. Вопрос, как правильно сделать тоже самое, но без AJAX?
Есть у вас два дома, в каждом доме есть по одной книге. В третьем доме вы хотите получить эти две книги. Так вот: вам не два дома надо спроецировать в третьем, а как-то получить доступ к этим книгам.
Собственно забываем про контроллеры и перезадаем вопрос в новом контексте.
Re: Лучший способ панельного интерфейса
nickdenry писал(а):Виджет - компонент многоразового использования
собственно вот вы пишите про многоразового использования, только не понимаете этого.nickdenry писал(а):Как НЕ использовать две модели, а отрендерить уже имеющиеся actionIndex уже имеющихся контроллеров CRUD для этих моделей?
а вообще собственно вот вопрос, аналогичный вашему: viewtopic.php?f=19&t=34542
Re: Лучший способ панельного интерфейса
Спасибо за аналогию, уточню вопрос.Есть у вас два дома, в каждом доме есть по одной книге. В третьем доме вы хотите получить эти две книги. Так вот: вам не два дома надо спроецировать в третьем, а как-то получить доступ к этим книгам.
Для этих моделей (двух книг) определен не только контроллер (дом), но и view (способ прочтения), уже, т.к. реализуется CRUD. В третьем контроллере (по третьему адресу) и view я хочу использовать уже имеющиеся представления, а не плодить новые. Как лучше это сделать?То есть изначально у вас есть данные и вы хотите иметь возможность выводить их в разных местах.
т.е. в простейшем случае в третьем контроллере я получаю эти модели и вывожу их как
Код: Выделить всё
return $this->render('index', [
'modelProjectCategory' => $modelProjectCategory,
'modelProjects' => $modelProjects,
]);
Код: Выделить всё
а вообще собственно вот вопрос, аналогичный вашему: viewtopic.php?f=19&t=34542
Ответственные программисты с высоким уровнем технического долга (c)
Re: Лучший способ панельного интерфейса
можно ренедерить вьюшки независимо от места их расположения: https://github.com/yiisoft/yii2/blob/ma ... e-views.md
Re: Лучший способ панельного интерфейса
ну там речь идет о получении данных. вам видимо надо еще и вьюшки.nickdenry писал(а):Если правильно понимаю отсюда - то фактически, мне нужен Helper для вывода той и другой модели, и методы хелпера уже использовать в контроллерах, чтобы не повторять код.