我有一个项目,我开始时没有在 ZF 1 中使用模块结构,现在我需要放置一个模块结构来管理用户(对我来说更有意义)。
我的问题“默认”路由应该尝试使用 :controller/:action/:id 并且模块路由
应该使用 :module/:controller/:action/:id ZF 1 的默认设置是使用上面没有:id
但我的“逻辑”需要 :id 字段,我怎样才能使这项工作?
我尝试的是:
protected function _initModuleAutoload()
{
$modelLoader = new Zend_Application_Module_Autoloader(
array('namespace' => 'DM',
'basePath' => APPLICATION_PATH . '/modules/default')
, array('namespace' => 'UM',
'basePath' => APPLICATION_PATH . '/modules/users')
);
$modelLoader->addResourceType('service', 'services', 'Service');
$modelLoader->addResourceType('serviceplugin', 'services/plugins', 'Service_Plugin');
return $modelLoader;
}
public function _initFrontController()
{
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$route1 = new Zend_Controller_Router_Route(
':module/:controller/:action/:id/',
array(
'id' => '\d+'
, 'module' => 'default'
, 'controller' => 'index'
, 'action' => 'index'
)
);
$router->addRoute('default', $route1);
$front->addModuleDirectory(APPLICATION_PATH . "/modules/");
$front
->registerPlugin(new Far_Access_Plugin_Identity(), 1)
->registerPlugin(new Far_Access_Plugin_Access(), 2)
->throwExceptions(true)
;
return $front;
}
还尝试为用户创建第二条路线而不是默认路线,但没有奏效。
有任何想法吗?我究竟做错了什么?
当我提供此链接时,在频道#zftalk 中提供了来自 freenode 中 irc 的帮助。
Bittarman: crash82: 向 id 添加要求,所以它必须是 [\d]+
Bittarman: 或者,只需添加一个 Zend_Controller_Router_Route_Module 实例,链接到 Zend_Controller_Router_Route,其中只有 :id,默认设置为 id,如 false。
Bittarman:另外,_initModuleAutoload,是毫无意义的 Bittarman:在模块目录中拥有“默认”模块,有点错误
Bittarman:并且您通过拥有 _initFrontController
Bittarman 来停止前端控制器资源的工作:因此 resources.frontController 将不再工作。crash82: 嗯...这么多问题:(,所以我可以将“默认”模块放入应用程序目录中,并且可以继续从模块/路径加载任何其他模块?
比特曼:是的:)
crash82: 去尝试那个 Bittarman: 并且,每个有引导程序的模块都提供自己的模块资源加载器
Bittarman: 所以,如果你去创建更多这样的东西,你最终会为每个模块创建两个。
Bittarman:你会惊讶于有多少人这样做。
比特曼:s/tht/that/