我有一个项目女巫,我开始没有在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 Bittarman:同样,_initModuleAutoload,毫无意义 Bittarman:在模块dir中有你的'默认'模块,有点儿 错
Bittarman:你停止前控制器资源 通过_initFrontController工作 Bittarman:所以resources.frontController将不再有效。crash82:哼......这么多问题:(,所以我可以放置 “默认”模块进入应用程序目录和任何其他模块 可以继续从模块/路径加载?
Bittarman:是的:)
crash82:试试吧 Bittarman:并且,每个具有引导程序的模块都提供自己的模块资源加载器
Bittarman:所以,如果你创造更多这样的东西,你最终会得到两个模块 Bittarman:你会惊讶于有多少人这样做 Bittarman:s / tht / that /
答案 0 :(得分:0)
当我需要在脚本中的url中传递参数时,我使用了几种方法中的一种。对于大多数简单的事情,没有必要创建新的路线。
<a href="/music/index/album/id/<?php echo $variable->id ?>"><?php echo $track->album ?></a>
。将参数传递为/ id/album_id
<?php echo $this->url(array('controller' => 'index', 'action' => 'index', 'id' => $variable->id)); ?>
此助手也会将模块作为第一个参数。$this->getHelper('Redirector')->gotoSimple('action'=> 'someAction', 'controller' => 'someController', 'module' => 'someModule', array('id' => $id );
,控制器,模块和参数是可选的,默认值为NULL
。 $this->_forward($action, $controller, $module, array($params))
与gotoSimple()具有相同的语法。还有其他方法可以实现这种路由,我会留给您查找其余的路由,但您可以从Action Helpers,utility methods和view helpers