[英]Simple rewrites in Zend Framework
這似乎是一個非常簡單的問題,但我只找到了復雜的答案。 我有一個Zend Framework應用程序,需要用戶登錄。 loginAction()
和logoutAction()
在AuthController
中定義。 我想允許用戶通過http://www.example.com/login登錄,而不是http://www.example.com/auth/login 。
我知道有很多方法可以做到這一點,我考慮過的是:
如果可能的話,我寧願把它排除在#1之外。 #2很容易理解,雖然看起來像是一個黑客。 它還可能使用一堆5行“Controller”類來混亂代碼。 我認為#3是要走的路,但我不完全明白如何有效地使用它。 我嘗試過將Zend_Config與RewriteRouter一起使用雖然我只定義了登錄路由,所以每個鏈接都變為'/ login'(我想我錯過了一個默認路由)。 我在我的Bootstrap.php中做到了這一點,我不確定這是否正確。
我缺少一個簡單的方法嗎? 我錯誤地使用了#3嗎? 我應該閱讀這方面的教程嗎? (我看過Zend文檔很好,但我經常發現自己在問'這個代碼應該放在哪里:在控制器,模型,引導程序,其他?')
對於一個定義的目的,就像你有一個“命名”路線將是最簡單的方法。 雖然有許多方法可以實現命名路由,但最簡單的方法是將它放在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'=>,'action'=>:
<?php echo $this->url(array('controller' => 'index', 'action' => 'index'), 'default') ?>
接近我在這個上下文中可以告訴'default'表示這將是Zend / Controller / Router / Route / Module.php中定義的默認路由
以防您如何以正確的方式在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(模塊/控制器/操作)
編輯:
如果要在視圖文件中使用新URL,則必須使用該路徑的鍵
在view.phtml中
<a href="<?php echo $this->url(array(), 'login'); ?>">
[link]
</a>
第一個參數是array(),第二個參數是您在bootstrap中定義的鍵。 與在bootstrap中將URL更改為/ new-login相比,所有URL都將在視圖文件中更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.