0

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

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

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

首选 URL 将显示在浏览器中。此外,如果访问者在 url 中键入用户名(例如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' => 'User','action'=> 'index'));

$router->addRoute('user', $routeUser);

4

1 回答 1

1

路由以相反的顺序检查,因此您可以将用户路由更改为 just: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

于 2012-06-22T15:07:01.473 回答