2011-12-23 15 views
3

をフェッチ/コントローラ名を変更私はこの1つのアナログであるルートを作成しました:CakePHPのルートは、コントローラ名

Router::connect("/backend/:controller/:action/*"); 

をそして今、私はルートにbackend_のようなものに名前を変更するには、このパターンに合うすべてのコントローラをしたいです:コントローラ。どういうわけか、そのような

Router::connect("/backend/:controller/:action/*", array('controller' => 'backend_:controller')); 

例:URLのwww.example.com/backend/settings/myactionが呼び出されると、それは「backend_settings」コントローラへのルートだろうとアクション「myaction」を起動します!

しかし、www.example.com/settingsと呼ばれるものがあると、コントローラの「設定」にルーティングされます。

URLはそれが呼び出されたままであるはずですが、cakePHPは変更されたコントローラ名のみを使用する必要があります。

私は誰かが私がこの問題のために使うべき最高の解決策を教えてくれることを願っています。前もって感謝します!

答えて

1

多分、ルータプレフィックスが必要です。今www.example.com/backend/settings/addがでbackend_add()と呼ばれるメソッドを探します..あなたは、ルートを追加する必要はありません...

Configure::write('Routing.prefixes', array('backend')); 

とそれがすべてです:

は、core.phpのに行くと、この行を追加します。設定コントローラ

そしてwww.example.com/settings/add

)=あなたがより良い例を見つけることができます

here設定コントローラにadd()というメソッドを呼び出します。

欲しい

+0

ありがとうございます。私はすでに接頭辞を知っています。残念ながら、フロントエンドコントローラーからバックエンドコントローラーを分離したいので、これは私が望むものではありません。接頭辞を使用して、私はバックエンドとフロントエンドの方法を混ぜるでしょう。ここでの問題は、バックエンドの「メイン」コントローラが認証をサポートしており、バックエンドを扱うすべてのコントローラがこのメインコントローラと特に認証を継承していることです。フロントエンドコントローラは認証をまったく処理すべきではありません。なぜ私はそれらを分離したいですか? – Dennis

+0

コントローラのすべてのルールを書く必要があるようです。バックエンドのURLをルーティングするために独自のクラスを使うこともできます。http://book.cakephp.org/2.0/ja/development /routing.html?highlight=routing#custom-route-classes – pleasedontbelong

5

ルートを指定するときにrouteClassプロパティを使用してカスタムルートクラスを使用できます。

これは、あなたが説明したまさにんCakeRouteクラス(自分のコントローラにコントローラのプレフィックスを付加)の私の実装です:

// ControllerPrefixRoute.php file in app/Routing/Route/ 

App::uses('CakeRoute', 'Routing/Route'); 

class ControllerPrefixRoute extends CakeRoute { 

    /** 
    * Parses a string url into an array. If a controller_prefix key is found it will be appended to the 
    * controller parameter 
    * 
    * @param string $url The url to parse 
    * @return mixed false on failure, or an array of request parameters 
    */ 
    public function parse($url) { 

     $params = parent::parse($url); 

     if (!$params) { 
      return false; 
     } 
     $params['controller'] = $params['controller_prefix'].'_'.$params['controller']; 
     return $params; 
    } 

} 

そして、ここではそれを使用する方法である:

// inside routes.php file in app/Config/ 

App::uses('ControllerPrefixRoute', 'Routing/Route'); 

Router::connect("/:controller_prefix/:controller/:action/*", array(), array('routeClass' => 'ControllerPrefixRoute')); 

したがって、このURLは/backend/settings/myactionとなります。BackendSettingsController::myaction

関連する問題