Zend Framework + Doctrine1.2 структура проекта с большим количеством модулей - PullRequest
2 голосов
/ 28 октября 2011

приложений вместе с реализацией ZendFramework + Doctrine 1.2 уже некоторое время, но теперь у них есть первый опыт использования большего количества модулей.Я просил, чтобы модуль по умолчанию был виден всем с определенной компоновкой и модулем администратора с другой компоновкой.

До сих пор в своих приложениях я всегда использовал следующую структуру:

/app
    /application
        /acls
        /configs
        /controllers
        /forms
        /layouts
        /models --> models by doctrine
            /generated --> base models by doctrine
        /plugins
        /views
        /Bootstrap.php
    /data
    /doctrine
        /data
        /migrations
        /schema
            /schema.yml
        /doctrine.php
    /library
    /public
    /tests

Итак, мой вопрос: как структура моего приложения должна делать то, что требуется?

Я попытался с помощью инструмента Zend и посмотреть, какую структуру я создал команду:

zf create module admin

курспосле запуска

zf create project app

я заметил, что при создании командного модуля я создал папку modules в applicationmodules создано admin, а внутри него создано controllers, models и views.

Таким образом, помимо разделительных средств zf контроллер и вид правильно, но и модели.Но моя доктрина создает все модели с одной стороны!: D

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

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

Для вечеринкиГость, вы советуете мне покинуть объект, который в настоящее время используется, или переместить все это в форму default?

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

Спасибо

1 Ответ

3 голосов
/ 01 ноября 2011

После тщательной документации я нашел правильную структуру проекта

/app
/application
    /acls
    /configs
        application.ini
    /layouts
        /scripts
            admin.phtml
            default.phtml
    /models --> models by doctrine
        /generated --> base models by doctrine
    /modules
        /admin
            /controllers
            /forms
            /view
        /default
            /controllers
            /forms
            /view
    /plugins
    /Bootstrap.php
/data
/doctrine
    /data
    /migrations
    /schema
        /schema.yml
    /doctrine.php
/library
/public
/tests

Для просмотра другого макета в зависимости от того, где вы находитесь, я использовал следующие плагины:

class Plugin_Layout extends Zend_Controller_Plugin_Abstract
{
    /**
     * Called before an action is dispatched by Zend_Controller_Dispatcher.
     *
     * @param  Zend_Controller_Request_Abstract $request
     * @return void
     */
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $layout = Zend_Layout::getMvcInstance();
        $module = $request->getModuleName();
        switch ($module) {
            case 'default':
                $layout->setLayout('default');
                break;
            case 'admin':
                $layout->setLayout('admin');
                break;
            default:
                $layout->setLayout('default');
                break;
        }
    }
}

в файл Bootstrap.php

 /**
 * @return Zend_Application_Module_Autoloader
 */
protected function _initAutoload()
{
    $autoloader = new Zend_Application_Module_Autoloader(array('namespace' => '', 'basePath' => APPLICATION_PATH));
    $autoloader->addResourceType('plugin', 'plugins', 'Plugin');
    return $autoloader;
}

в файл application.ini

resources.frontController.plugins.auth = Plugin_Layout
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

описанный выше плагин в соответствии с используемым модулемустановит макет с именем module.phtml в "layout / scripts".


Как автоматически загружать формы в модуле

добавьте две строки ниже в ваш application.inifile

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = ""

Создайте файл boostrap для каждого модуля.Файл с именем Bootstrap.php должен быть помещен в корень каталога модуля, а имя класса должно быть {имя модуля} _Boostrap.Этот файл начальной загрузки заставит Zend Framework автоматически добавить новый каталог форм в автозагрузчик.

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap {}

Добавить класс формы в каталог / forms.Форма входа будет иметь имя файла Login.php и имя класса {имя модуля} _Form_Login

class Admin_Form_Login extends Zend_Form

Вызов вашей формы из файла контроллера из того же модуля

$form = new Admin_Form_Login();

Просто и эффективно!;)

...