我正在Zend Framework中构建一个新的CMS,我没有太多接触ZF。客户端需要两个名为Admin和FE的部分。所以,我的应用程序结构如下:
- SITE -- application ---- configs ---- layouts ---- modules -------- default ------------ controllers ------------ forms ------------ models ------------ views ------------ Bootstrap.php -------- admin ------------ controllers ------------ forms ------------ models ------------ views ------------ Bootstrap.php ---- Bootstrap.php -- public -- library -- index.php
当我访问http://site或http://site/admin等网站时,我的结构工作正常,并且正在加载布局和控制器。
我的问题是 1.)如何在模块中自动加载模型。在模型特定的引导程序文件中,我添加了下面的代码。但它没有用。
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
protected function _initAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'basePath' => APPLICATION_PATH.'/modules/admin/',
'namespace' => '',
'resourceTypes' => array(
'form' => array(
'path' => 'forms/',
'namespace' => 'Form_',
),
'model' => array(
'path' => 'models/',
'namespace' => 'CPModel_'
)
),
));
return $autoloader;
}
}
2.。)我将如何为不同的模块使用不同的布局?
答案 0 :(得分:3)
这里有两个问题:
对于自动加载模型,首先确保模块引导类扩展Zend_Application_Module_Bootstrap
。这将注册包含映射的资源自动加载器,以便名为Admin_Model_User
的模型类可以存储在文件application/modules/admin/models/User.php
中(请注意路径中的复数模型* s *名称)。对于上面描述的用法,您似乎不需要自己定义任何此类映射。
默认模块有一些棘手的问题。 IIRC,默认模块使用appnamespace,通常默认为Application_
。因此,例如,默认模块中的用户模型将命名为Application_Model_User
并存储在文件application/modules/default/models/User.php
中。 [如果这不起作用,请尝试命名Default_Model_User
]
[但是,如果你真的坚持你的管理模块的空appnamespace和你的模型的CPModel前缀 - 正如你的例子所示 - 那么其中一些变化。]
结果是,由于大多数这些文件夹不在include_path上,因此系统需要在某个时候告知要将哪些类前缀关联/映射到哪些目录。
对于特定于模块的布局,通常我会创建一个实现preDispatch()
挂钩的front-controller plugin。如果您将布局保留在application/layouts/scripts/
的顶层,那么您的插件可能看起来像application/plugins/Layout.php
中存储的内容:
class Application_Plugin_Layout extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
Zend_Layout::getMvcInstance()->setLayout($request->getModuleName());
}
}
通过Bootstrap
在您的应用级applications/config/application.ini
注册您的插件:
resources.frontController.plugin.layout = "Application_Plugin_Layout"
或Bootstrap
中的应用级application/Bootstrap.php
:
protected function _initPlugins()
{
$this->bootstrap('frontController');
$front = $this->getResource('frontController');
$front->registerPlugin(new Application_Plugin_Layout());
}
然后,例如,您的管理员布局可以存储在application/layouts/scripts/admin.phtml
。