我使用Zend Framework开发的应用程序之一需要通过website.com/username访问用户的个人资料页面,而其他页面应该通过website.com/controller_name/action_name访问
我不太清楚如何实现这一点,但是,我觉得可以通过.htaccess文件中的一些调整来完成。
有人可以帮助我吗?
非常感谢提前
答案 0 :(得分:2)
如前所述,您可以使用自定义路由来路由单级请求。但是,这也将覆盖默认路由。如果您正在使用模块,则此功能将不再有效example.com/<module>
。
我以前做过这个,但仅限于静态页面。我想要这个:
example.com/about
而不是:
example.com/<some-id>/about
同时保持默认路线,这样仍然有效
example.com/<module>
example.com/<controller>
我这样做的方法是使用插件来测试我的请求是否可以发送。如果无法使用默认路由调度请求,那么我会将请求更改为正确的模块以加载我的页面。这是一个示例插件:
class My_Controller_Plugin_UsernameRoute extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
if (!$dispatcher->isDispatchable($request)) {
$username = $request->getControllerName();
$request->setModuleName('users');
$request->setControllerName('dashboard');
$request->setActionName('index');
$request->setParam('username', $username);
/** Prevents infinite loop if you make a mistake in the new request **/
if ($dispatcher->isDispatchable($request)) {
$request->setDispatched(false);
}
}
}
}
答案 1 :(得分:-1)
如何使用Zend_Controller_Router_Route,请在此处查看链接http://framework.zend.com/manual/en/zend.controller.router.html#zend.controller.router.routes.standard.variable-requirements