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

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

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

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

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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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