Использование переменных в макетах с использованием Zend Framework - PullRequest
1 голос
/ 12 марта 2012

Я пытаюсь научиться использовать Zend Framework, и у меня возникли проблемы.Я пытаюсь поместить имя текущего пользователя в заголовок приложения (отображается на каждой странице), в частности /layouts/scripts/default.phtml.

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

Приветствия

Ответы [ 3 ]

2 голосов
/ 12 марта 2012

Это та вещь, для которой были разработаны помощники действий.Полное руководство по ним немного выходит за рамки SO, но есть несколько хороших доступных руководств.

Начните с Zend Framework Documentation , а затем посмотрите на MathewУчебное пособие Вейера О'Пинни , а также это * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 9.они нужны контроллеру или нет, тогда как помощники действий загружаются только при необходимости.

Я почти забыл, что ZendCasts имеет отличное видео о помощниках действий .

1 голос
/ 12 марта 2012

Требуется базовый контроллер и назначить его в методе preDispatch:

class MyApp_Controller_Action extends Zend_Controller_Action {
    public function preDispatch() {
        parent::preDispatch();
        Zend_Layout::getMvcInstance()->assign('username', getCurrentUserName());
    }
}

Затем добавьте свои собственные контроллеры в этот новый класс:

class MyApp_Module_ActionController extends MyApp_Controller_Action {

}

Тогда в вашем макете:

echo $this->layout()->username;
0 голосов
/ 12 марта 2012

Сначала прочитайте руководство, а затем попытайтесь выполнить что-то вроде этого:

class BaseController extends Zend_Controller_Action {

    public function preDispatch() {
        // your logic to show the user name goes here
    }

}

class SomePageController extends BaseController {}

class SomeOtherPageController extends BaseController {}

Это, скорее всего, решит вашу проблему.

...