应用程序加上实现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
如何为每个模块使用doctrine创建的模板?
那么如何为管理模块分配新的布局?
对于派对嘉宾,您建议我以default
的形式离开当前使用的设施或将其全部移动?
很抱歉,如果我提出了很多问题,也许太多了,但我真的很困惑!
由于
答案 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();
简单有效! ;)