簡體   English   中英

Zend Framework中的簡單重寫

[英]Simple rewrites in Zend Framework

這似乎是一個非常簡單的問題,但我只找到了復雜的答案。 我有一個Zend Framework應用程序,需要用戶登錄。 loginAction()logoutAction()AuthController中定義。 我想允許用戶通過http://www.example.com/login登錄,而不是http://www.example.com/auth/login

我知道有很多方法可以做到這一點,我考慮過的是:

  1. .htaccess重寫
  2. 創建LoginController並將indexAction()重定向到auth / login
  3. 使用Zend_Controller_Router_Rewrite定義自己的路由。

如果可能的話,我寧願把它排除在#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM