Вторая часть задачи.
В моем проекте должен быть, как я уже писал, админский модуль; а вот фронт-энд должен быть разделен на две одинаковые по структуре части. Первоначально я думал сделать для каждой из них свой отдельный модуль. Но ведь структура один в один, и я решил, что это неразумно. И тут мне на помощь вновь пришел Ероен Кеппенс! Похоже, я торчу ему пиво...
В своей другой статье он рассказал, как он сделал админский псевдо-модуль - "попросту" попрописывал руты. Я немного видоизменил его код, убрав из рутов :module
- я не понял, зачем ему надо было его указывать - на мой взгляд, по крайней мере, в моем проекте, это кажется излишеством. Таким образом, у меня получилось три, а не четыре, рута. Кроме того, в конструктор Zend_Controller_Router_Route
я не добавлял _layout
- учитывая LayoutLoader
в первой части (я, Ероен), я решил, что это лишнее. Вместо этого я написал роутеру, что мой псевдомодуль - на самом деле дефолтный модуль. Но также, чтобы различать, в каком псевдомодуле я нахожусь, там же прописал и переменную, которая видна в getRequest()
.
В итоге получилось:$route = new Zend_Controller_Router_Route(
'ophtalmology/:controller/:action/*',
array('module' => 'default', 'section' => 'ophtalmology'));
$front->getRouter()->addRoute('ophtalmology_controller_action', $route);
и далее по тексту.
02 August, 2009
Мой опыт в создании модульного приложения на Zend Framework: Часть 2
Posted at
14:12
0
comments
Labels: modular, zend framework, zend_router
Мой опыт в создании модульного приложения на Zend Framework: Часть 1
Решил сделать все "правильно". Пишу, чтобы запомнились шаги - что-то типа self-manual...
Итак, упрощенная задача: приложение с двумя модулями - дефолтным и админским.
Естественно, сперва скачал последний фреймвёрк.
Затем создал системную переменную zf
и в нее поместил путь к zf.bat
(Zend Framework/bin/zf.bat
).
Потом из командной строки командой zf create project
создал проект. При этом вызывал из папки, в которой следовало создать проект, но почему-то тул попросил указать путь к проекту.
Не забыл скопировать библиотеку в мой_проект/library
.
Дальше пошел гуглить :) Т. к. интересовало, как люди создают модульные проекты. В принципе, некий опыт был, но он, на мой взгляд, был каким-то... не совсем правильным.
Нашел статью некого Ероена Кеппенса, который очень мне помогает (начальное написание проекта все еще в процессе) - вот она.
До момента написания LayoutHelper
сделал, в общем-то, всё, как и у него:
- zf create module admin
;
- добавил в application.ini
строкиresources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[]
За исключением того, что не добавил буцтрап в админский модуль и пока еще не проинитил в буцтрапе приложения _initAppAutoload()
- т. к. мне непонятно, почему здесь мы видим App
- в квикстарте никакого App
нету... будем посмотреть.
Дальше создал папку application/views/layouts
, в нее поместил default.phtml
и admin.phtml
- лэяуты для дефолтного и админского модулей соответственно.
Дальше, как и у мистера Кеппенса, добавил в конфиг следующее:resources.layout.layoutPath = APPLICATION_PATH "/views/layouts"
resources.layout.layout = default
admin.resources.layout.layout = admin
А вот потом, несколько подумав, решил таки воспользоваться его хелпером для подгрузки лэяутов. Долго думал, куда же мне положить этот хелпер - у автора он лежит в его собственной лайбрари, но в предыдущих проектах мы клали экшен хелперыы прямо в approot, что мне кажется не совсем правильным - грубо говоря, засирается папка, да и как-то не по-зендовски это. В итоге, было решено в папке мой_проект/library
создать папку для, так сказать, собственной библиотеки: мой_проект/library/Spod
. И хелпер поместил по пути, аналогичному тому, где лежат экшен хелперы в родной зендовской библиотеке, предварительно, естественно, посоздавав соответствующие папки: мой_проект/library/Spod/Controller/Action/Helper/LayoutLoader.php
.
Ну и проинитил в буцтрапе, как и автор.
После этого, обновив страничку, обнаружил ошибку, что мой класс не найден. Вспомнил, что автор в начале статьи прописал свою библиотеку в конфиг. Так же сделал и я:autoloaderNamespaces.spod = "Spod_"
Работает so far :)
Posted at
13:22
0
comments
Labels: modular, zend framework, zend tool, zend_layout