Помощник просмотра действий в Zend – работайте?

Я работаю над созданием интерфейса, который я хочу использовать как функцию «с вкладками». Каждая из этих вкладок уже написана как действие, а интерфейс с вкладками прекрасно работает в качестве ссылок на отдельные вкладки. Я решил попробовать написать страницу «index» для этого контроллера – поместив содержимое всех вкладок в скрытые div и обменявшись между ними с помощью jQuery, но как только я начал использовать помощник вида действия, я столкнулся с множеством людей, говорящих что его плохая практика. ( см. эту статью )

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

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

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

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

Кто-нибудь есть предложения по «правильному» способу работы, не используя Zend_View_Helper_Action ?

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

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

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

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

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

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

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

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

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

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

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

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

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