Структура проекта Zend Framework + Doctrine1.2 с большим количеством модулей

приложения соединялись с реализацией 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 в application. Внутри modules создано admin, а внутри создано controllers, models и views.

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

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

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

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

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

Спасибо


person JellyBelly    schedule 28.10.2011    source источник


Ответы (1)


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

/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 в «макеты / сценарии».


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

добавьте две строки ниже в файл application.ini

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

Создайте файл ускорения для каждого модуля. Файл с именем 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();

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

person JellyBelly    schedule 01.11.2011
comment
Чтобы было понятнее, ваш ответ - это решение, а также примите свой ответ! - person Kees Schepers; 02.11.2011
comment
@KeesSchepers - это именно то, что я сделал. Через несколько дней я не получил ответа, а потом нашел ответы в другом месте. Затем я подумал о письме как о ответе, чтобы позже он мог послужить кому-то другому. Я ошибался? - person JellyBelly; 02.11.2011
comment
@KeesSchepers: Могу я это сделать? Это против правил? - person JellyBelly; 02.11.2011
comment
Я не уверен, но я видел, как все больше людей советуют это и делают так, чтобы они считали это разрешенным или даже предлагали. Проверьте это: blog.stackoverflow.com/2009/01/accept-your-own-answers < / а> - person Kees Schepers; 02.11.2011