cakephp 路由修改 Controller 名称/获取 Controller 名称

jillzhang 阅读:20 2024-10-01 17:34:08 评论:0

我创建了一条与此类似的路线:

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

现在我想将符合此模式的每个 Controller 路由重命名为类似 backend_:controller 的名称。

有点像:

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

示例:如果调用 URL www.example.com/backend/settings/myaction,它将路由到 Controller “backend_settings”并调用操作“myaction”!

但另一方面,如果有人调用 www.example.com/settings,它会路由到 Controller “设置”。

URL 应该保持它被调用的方式,cakePHP 应该只使用修改后的 Controller 名称!

我希望有人能指出我应该用于解决此问题的最佳解决方案。提前致谢!

请您参考如下方法:

您可以在指定路由时使用 routeClass 属性,并使用自定义路由类。

这是我对 CakeRoute 类的实现,它完全按照您的描述执行(将 Controller 前缀附加到您的 Controller ):

// 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


标签:PHP
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号