02 August, 2009

Мой опыт в создании модульного приложения на 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 :)

No comments: