Лучший способ панельного интерфейса

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
nickdenry
Сообщения: 99
Зарегистрирован: 2015.10.28, 04:55

Лучший способ панельного интерфейса

Сообщение nickdenry »

Всем привет!

Имеются модели: ProjectCategory hasMany Project. К каждой модели есть Controller с CRUD. Задача - вывести записи модели ProjectCatagory в виде бокового меню, модели Project в виде контента. Первоначально думал, что можно из view "панели" отрендерить actionIndex каждого контроллера, но много где пишут что рендерить action из view - неправильно и это нарушает MVC. Как в таком случае лучше вывести каждое представление в одном View/Layout?
Ответственные программисты с высоким уровнем технического долга (c)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Лучший способ панельного интерфейса

Сообщение zelenin »

какие-то панели...
видимо речь идет о виджетах.
nickdenry
Сообщения: 99
Зарегистрирован: 2015.10.28, 04:55

Re: Лучший способ панельного интерфейса

Сообщение nickdenry »

>>какие-то панели...

Возможно не совсем точно выразился, но речь по-моему не о виджетах. Виджет - компонент многоразового использования, а мне интересно, как вывести данные из двух контроллеров в одном view.

| тут ProjectCategory | тут Projects |

Или это обязательно должен быть один view одного контроллера с 2мя моделями?

Допустим SiteController.php

Код: Выделить всё

return $this->render('index', [
                'modelProjectCategory' => $modelProjectCategory,
                'modelProjects' => $modelProjects,
            ]);
- так если делать через контроллер и использовать при рендеринге 2 модели. Как НЕ использовать две модели, а отрендерить уже имеющиеся actionIndex уже имеющихся контроллеров CRUD для этих моделей? Или правильно использовать именно 2 модели при рендеринге в одном контроллере.

Через AJAX я бы запросил indexAction каждого из контроллеров и отрендерил результат в одном view, каждый в своем месте. Вопрос, как правильно сделать тоже самое, но без AJAX?
Последний раз редактировалось nickdenry 2015.12.23, 03:00, всего редактировалось 1 раз.
Ответственные программисты с высоким уровнем технического долга (c)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Лучший способ панельного интерфейса

Сообщение zelenin »

nickdenry писал(а):>>какие-то панели...

Возможно, не совсем точно выразился, но речь по-моему не о виджетах. Виджет - компонент многоразового использования, а мне интересно, как вывести данные из двух контроллеров в одном view.

| тут ProjectCategory | тут Projects |

Или это обязательно должен быть один view одного контроллера с 2мя моделями? Через AJAX я бы запросил index каждого из контроллеров и отрендерил результат в одном view, каждый в своем месте. Вопрос, как правильно сделать тоже самое, но без AJAX?
вам надо понять саму концепцию. Вам нужно вывести не данные из двух контроллеров (данные - это данные, а контроллеры - это банально путь из адресной строки), а просто данные. То есть изначально у вас есть данные и вы хотите иметь возможность выводить их в разных местах.
Есть у вас два дома, в каждом доме есть по одной книге. В третьем доме вы хотите получить эти две книги. Так вот: вам не два дома надо спроецировать в третьем, а как-то получить доступ к этим книгам.

Собственно забываем про контроллеры и перезадаем вопрос в новом контексте.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Лучший способ панельного интерфейса

Сообщение zelenin »

nickdenry писал(а):Виджет - компонент многоразового использования
nickdenry писал(а):Как НЕ использовать две модели, а отрендерить уже имеющиеся actionIndex уже имеющихся контроллеров CRUD для этих моделей?
собственно вот вы пишите про многоразового использования, только не понимаете этого.

а вообще собственно вот вопрос, аналогичный вашему: viewtopic.php?f=19&t=34542
nickdenry
Сообщения: 99
Зарегистрирован: 2015.10.28, 04:55

Re: Лучший способ панельного интерфейса

Сообщение nickdenry »

Есть у вас два дома, в каждом доме есть по одной книге. В третьем доме вы хотите получить эти две книги. Так вот: вам не два дома надо спроецировать в третьем, а как-то получить доступ к этим книгам.
Спасибо за аналогию, уточню вопрос.
То есть изначально у вас есть данные и вы хотите иметь возможность выводить их в разных местах.
Для этих моделей (двух книг) определен не только контроллер (дом), но и view (способ прочтения), уже, т.к. реализуется CRUD. В третьем контроллере (по третьему адресу) и view я хочу использовать уже имеющиеся представления, а не плодить новые. Как лучше это сделать?

т.е. в простейшем случае в третьем контроллере я получаю эти модели и вывожу их как

Код: Выделить всё

return $this->render('index', [
                'modelProjectCategory' => $modelProjectCategory,
                'modelProjects' => $modelProjects,
            ]);
но при этом не могу использовать уже имеющиеся представления для этих моделей.

Код: Выделить всё

а вообще собственно вот вопрос, аналогичный вашему: viewtopic.php?f=19&t=34542
Если правильно понимаю отсюда - то фактически, мне нужен Helper для вывода той и другой модели, и методы хелпера уже использовать в контроллерах, чтобы не повторять код.
Ответственные программисты с высоким уровнем технического долга (c)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Лучший способ панельного интерфейса

Сообщение zelenin »

можно ренедерить вьюшки независимо от места их расположения: https://github.com/yiisoft/yii2/blob/ma ... e-views.md
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Лучший способ панельного интерфейса

Сообщение zelenin »

nickdenry писал(а):Если правильно понимаю отсюда - то фактически, мне нужен Helper для вывода той и другой модели, и методы хелпера уже использовать в контроллерах, чтобы не повторять код.
ну там речь идет о получении данных. вам видимо надо еще и вьюшки.
Ответить