如何在Zend Framework中的URL中隐藏一个特定的控制器名称

时间:2012-06-22 10:42:16

标签: zend-framework .htaccess url-rewriting

我在Zend Framework中有一个网站。我想在URL中隐藏一个特定的控制器名称。解释下面的要求。

当前网址http://abcd.com/user/john(用户的个人资料页面)

首选网址http://abcd.com/john

首选网址将显示在浏览器中。此外,如果访问者在网址中输入用户名(例如。http://abcd.com/smith),浏览器将显示用户个人资料。

我的网站中也有一些其他控制器(例如。http://abcd.com/registration)并且不想修改或隐藏这些控制器名称。

我知道要识别哪个是用户名以及哪个是url中的控制器可能很难有所作为,但我真的想要实现这一目标。请建议我需要。

请注意,我使用以下html代码显示用户个人资料链接。

<a href="<?php echo $site?>user/john">John</a>

还在bootstrap.php文件中添加了下面提到的路由器。

$ routeUser = new Zend_Controller_Router_Route('user /:username /',array('controller'=&gt;'User','action'=&gt;'index'));

$ router-&gt; addRoute('user',$ routeUser);

1 个答案:

答案 0 :(得分:1)

以相反的顺序检查路由,因此您可以将用户路由更改为:username但是路由器无法知道example.com/registration不是用户配置文件,这就是为什么打破你的其他路线。解决此问题的最简单方法是在处理注册请求的用户路由之后添加另一个路由:

$router->addRoute('registration',
    new Zend_Controller_Router_Route('registration/:action', array(
        'module' => 'default',
        'controller' => 'registration',
        'action' => 'index'
    ))
);

或者,如果您对ZF非常熟悉并希望在不破坏标准路由的情况下正确处理用户请求,则可以专门为您的用户配置文件请求创建自定义路由类。我刚刚写了一篇关于如何做到这一点的博客文章,请参阅:http://tfountain.co.uk/blog/2010/9/9/vanity-urls-zend-framework