2015-01-07 145 views
0

我爲我的應用程序(使用CakePHP 2.6.0)創建插件,允許用戶使用與管理區域相同的模型登錄到用戶區域,所以我試圖獲得與管理區域相同類型的URI方案,例如/admin/users/login,但對於/special/users/login。我在我的插件的配置/ routes.php文件下列路線,並且增加了「特別」前綴「Routing.prefixes」配置:前綴控制器的插件路由

Router::connect('/special/:controller/:action', array(
    'special' => true, 
    'prefix' => 'special', 
    'plugin' => 'Special', 
    'controller' => ':controller', 
    'action' => ':action', 
)); 

通過以上路徑,然後輸入以下網址/special/users/login它將使意義我現在如果蛋糕去Plugin/Controller/SpecialUsersController.php(考慮命名空間與主應用程序的UsersController衝突),但我得到一個錯誤Error: Create the class UsersController

是否有內置的方式來加載基於插件的前綴控制器(不更改url)?還是有更好的方法來整潔地擴展我的主應用程序?我是否以這種錯誤的方式去做?

回答

0

我找不到它,因爲我想,所以我改變了我的應用程序的Routing/Route/文件夾中使用自定義的路由類URL字符串被解析的方式工作內置方式:

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

/** 
* Plugin route will make sure plugin routes get 
* redirected to a prefixed controller. 
*/ 
class PluginRoute extends CakeRoute { 

    /** 
    * Parses a string URL into an array. 
    * 
    * @param string $url The URL to parse 
    * @return bool False on failure 
    */ 
    public function parse($url) { 
     $params = parent::parse($url); 

     if($params && !empty($params['controller']) && !empty($params['plugin'])) { 
      $params['controller'] = $params['plugin'] . ucfirst($params['controller']); 
     } 

     return $params; 
    } 

} 

然後建立我的插件路線爲:

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

Router::connect('/special/:controller/:action', array(
    'special' => true, 
    'prefix' => 'special', 
    'plugin' => 'Special', 
    'controller' => ':controller', 
    'action' => ':action', 
), array(
    'routeClass' => 'PluginRoute' 
)); 

這導致/special/users/login創造我想要Plugin/Controller/SpecialUsersController.php,無副作用到目前爲止控制器。儘管擴展主應用程序的UsersController是一個不同的故事。

也許別人有使用這個或知道更好的解決方案?