Action View Helper в Zend-обойти?

Я работаю над созданием интерфейса, который я хочу функционировать как функция просмотра с вкладками. Каждая из этих вкладок уже написана как действие, и интерфейс с вкладками отлично работает как ссылки на отдельные вкладки. Я решил попробовать написать страницу "индекс" для этого контроллера-помещая содержимое всех вкладок в скрытые divs и обмениваясь между ними с помощью jQuery, но как только я начал использовать помощник action view - я столкнулся с множеством людей, говорящих, что это плохо практиковать. (эту статью)

некоторые из этих действий создают формы-захватывают некоторые данные из модели и т. д. Для отображения. Я хочу, чтобы каждое из действий продолжало функционировать самостоятельно (некоторые формы разбора также).

просмотр в /item должен дать вам меню с вкладками, а также все содержимое div в скрытом теге-где /item / tab2 является конкретным действием (например, форма отправки).

еще одно осложнение / оговорка-некоторые из действий будут бросьте исключения доступа, если у пользователя нет доступа к этой "вкладке". Я бы предпочел не создавать проверку доступа в систему дважды (таким образом, показывая вкладку с пустым содержимым).

Я просто пытаюсь выяснить, какая лучшая практика для обработки такого рода вещей, и я подумал, что помощник действия может быть им. Если я попытаюсь использовать помощники просмотра - я начну задаваться вопросом, правильно ли это место для сборки Zend_Form.

есть ли у кого-нибудь предложения по " правильному" способ обойти не используя Zend_View_Helper_Action ?

4 ответов


правильный способ работы с помощником представления действий, как я уже говорил в приведенной вами статье, заключается в создании частичных элементов, которые обращаются к модели напрямую для получения необходимых им данных. Это может быть через view helper (вы делаете это сами;)), если это будет включать в себя много логики в вашем представлении.

action view helper страдает не только проблемами производительности, но и создает ужасные кошмары отладки, и если вам это нужно, то ваше приложение, вероятно, не следуя MVC, и поэтому вы используете контроллер для повторного использования вместо модели, которая является намерением шаблонов.

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

Если у вас есть несколько действий для работы с несколькими возможными сообщениями из ваших вкладок, то вы должны установить все эти действия для отображения одного и того же сценария просмотра, который затем отобразит все вкладки с данными direct из модели.


Если вы не создаете панели вкладок/вкладок из существующей разметки и загружаете содержимое по требованию, то вы просто должны проверить, имеет ли пользователь разрешение на доступ к вкладке перед отображением самой вкладки и снова при попытке загрузить содержимое вкладки.

Проверка наличия у пользователя этих прав доступа должна быть приемлемым режимом работы и не должна быть дорогостоящей.

Если эти действия создают контент, который работает на какой-то отдельной странице, в дополнение к вкладкам, помощник представления действий-это способ продолжить. Просто выполните ту же проверку ACL (или другую), выполненную в действии при создании вкладки.


Я не совсем уверен, что ваш точный проблема, однако вы можете отключить макет:

$this->_helper->layout->disableLayout();

затем запрошенное действие просто отобразит его скрипт просмотра, который вы можете загрузить на вкладку.

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


вы можете поймать любые исключения доступа используя try/catch блок:

try { // action throwing exceptions } catch (Exception $e) { // catch silently }