这似乎是一个非常简单的问题,但我只找到了复杂的答案。我有一个Zend Framework应用程序,需要用户登录。 loginAction()
和logoutAction()
在AuthController
中定义。我希望允许用户通过http://www.example.com/login而不是http://www.example.com/auth/login登录。
我知道有很多方法可以做到这一点,我考虑的是:
如果可能,我宁愿将它排除在#1之外。 #2很容易理解,虽然看起来像是一个黑客。它还可能使用一堆5行“Controller”类来混乱代码。我认为#3是要走的路,但我不完全明白如何有效地使用它。我试过Using Zend_Config with the RewriteRouter虽然我只定义了登录路由,所以每个链接都变为'/ login'(我想我错过了一条默认路由)。我在我的Bootstrap.php中做到了这一点,我不确定这是否正确。
我缺少一个简单的方法吗?我错误地使用了#3吗?我应该阅读这方面的教程吗? (我看过Zend文档很好,但我经常发现自己在问'这个代码应该放在哪里:在控制器,模型,引导程序,其他?')
答案 0 :(得分:10)
出于定义的目的,就像你有“named”路线一样,这是最简单的方法。虽然有多种方法可以实现命名路由,但最简单的方法是将它放在 application.ini中:
// /application/configs/application.ini
resources.router.routes.login.route = /login
resources.router.routes.login.defaults.module = default
resources.router.routes.login.defaults.controller = auth
resources.router.routes.login.defaults.action = login
把它放在你的引导程序中没有错,它对我来说似乎不方便
同样这样做应该(无保证)可以防止默认路由出现任何问题。
使用url()帮助器调用路由时,务必记住使用命名路由:
<?php echo $this->url(array(), 'routeName') ?>
或者如果您需要传递正常的'controller'=&gt; ,'action'=&gt; :
<?php echo $this->url(array('controller' => 'index', 'action' => 'index'), 'default') ?>
附近,因为我在这个上下文中可以告诉'default'表示这将是 Zend / Controller / Router / Route / Module.php
中定义的默认路由答案 1 :(得分:3)
如果您对如何以正确方式在bootstrab中执行此操作感兴趣。
如果只有一条路线需要重写,只需添加功能:
protected function _initRoute() {
$router = Zend_Controller_Front::getInstance()->getRouter();
$router->addRoute('login', //key of route !
new Zend_Controller_Router_Route(
'login', //this is url(www.url.com/login) that you want to rewrite, you can set whatever you want
array(
'module' => 'default',
'controller' => 'auth',
'action' => 'login',
)
));
}
现在,每个www.your-url.com/ 登录请求都会指向 www.your-url.com/default/auth/login(模块/控制器/行动)
编辑:
如果要在视图文件中使用新网址,则必须使用该路径的密钥
在view.phtml中
<a href="<?php echo $this->url(array(), 'login'); ?>">
[link]
</a>
第一个参数是array(),第二个参数是你在bootstrap中定义的键。 与在bootstrap中将URL更改为/ new-login相比,所有URL都将在视图文件中更改。