Zend Framework + Doctrine1.2项目结构包含更多模块

时间:2011-10-28 11:45:06

标签: zend-framework structure doctrine-1.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,其内部已创建controllersmodelsviews

所以除了分离意味着zf控制器和视图正确,还要模型。 但是我的学说一方面创造了所有的模型! :d

如何为每个模块使用doctrine创建的模板?

那么如何为管理模块分配新的布局?

对于派对嘉宾,您建议我以default的形式离开当前使用的设施或将其全部移动?

很抱歉,如果我提出了很多问题,也许太多了,但我真的很困惑!

由于

1 个答案:

答案 0 :(得分:3)

在完整的文档后,我找到了正确的项目结构

/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/"

根据使用的模块,上面描述的插件将在“layouts / scripts”中设置module.phtml名称的布局。


如何在模块中自动加载表单

将以下两行添加到application.ini文件

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

为每个模块创建一个boostrap文件。名为Bootstrap.php的文件应放在模块目录的根目录中,类名应为{module name} _Boostrap。此引导文件将导致zend框架自动将新表单目录添加到自动加载器。

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap {}

将表单类添加到/ forms目录。登录表单的文件名为Login.php,类名为{module name} _Form_Login

class Admin_Form_Login extends Zend_Form

从同一模块中的控制器文件中调用您的表单

$form = new Admin_Form_Login();

简单有效! ;)