Отдельные макеты и пространства имен для внешнего интерфейса / бэкенда в приложении Zend - PullRequest
1 голос
/ 20 сентября 2011

Мне пришлось разработать CMS с использованием Zend Framework, и я использовал пространство имен по умолчанию, определенное в моей надстройке для моего бэкэнда:

autoloaderNamespaces[] = "Application_"

Теперь я хочу разработать внешний интерфейс, ноЯ не знаю, как это сделать, так как у меня есть доступ к моему бэкэнду из каталога /public/.

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

мое дерево файлов выглядит следующим образом:

tree

Поэтому, если я создаю модуль frontend, я должен создать каталог frontend, следующийв каталог application?

РЕДАКТИРОВАТЬ: я создал 2 каталога pub и frontend рядом с каталогом приложения.В pub/index.php я инициализировал загрузчик с файлом application/configs/application.ini с другим APPLICATION_FRONT_ENV:

[frontprod : production]

bootstrap.path = APPLICATION_FRONT_PATH "/bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_FRONT_PATH "/controllers"
autoloaderNamespaces[] = "Frontend_"
resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATION_FRONT_PATH "/layouts/scripts"

[frontdev: frontprod]

phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

, а в frontend/bootstrap.php я загружал модели из каталога application:

public function _initAutoloader(){

        $baseAutoload = new Zend_Loader_Autoloader_Resource(array(
                                    'namespace' => 'Application',
                                    'basePath' => realpath(dirname(__FILE__).'/../application')
                                )
                            );

}

И вроде нормально работает =) спасибо!

1 Ответ

1 голос
/ 20 сентября 2011

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

Модули позволяют вам перегруппировать в одной папке модуля все, что связано только с этим модулем, и таким образом изолировать «части» вашего приложения в логические группы. В вашем случае это были бы «назад» и «спереди», но вы могли бы также иметь модуль «форум» или, скажем, модуль «магазин».

С точки зрения URL, модульной структурой по умолчанию является маршрутизация example.com/module/controller/action, но с использованием маршрутов имени хоста вы также можете указывать www.example.com на модуль front и admin.example.com указывают на ваш бэкэнд.

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

Существует другая альтернатива, которая может хорошо подходить для логики бэкэнда / внешнего интерфейса, но не если вы хотите разделить код на более логичные части (форум, блог, магазин, ...). Вы просто создаете вторую папку приложения (вы бы назвали «frontend») рядом с папкой «application» и второй общедоступный каталог (где вы можете использовать символическую ссылку на вашу папку ресурсов, если вы используете те же самые), и другое пространство имен.

Чтобы иметь возможность автоматически загружать классы «Application_» в коде вашего внешнего интерфейса, просто добавьте и настройте Module Autoloader в своем загрузочном интерфейсе внешнего интерфейса. Код довольно прост:

//in your frontend/Bootstrap.php
public function _initAutoloader(){
     new Zend_Loader_Autoloader_Resource( array(
             'namespace' => 'Application_',
             'path' => realpath(dirname(__FILE__).'/../application'
         )
     );
}

Для файла конфигурации application.ini я бы порекомендовал вместо дублирования создать раздел [frontprod : production], в котором вы переопределяете настройки вашего бэкэнда (и соответствующий [frontdev: frontprod] для ваших локальных настроек).

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

...