3

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

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

现在我想将适合此模式的每个控制器路由到重命名为 backend_:controller 之类的东西。

不知何故:

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 应该只使用修改后的控制器名称!

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

4

2 回答 2

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

于 2012-06-09T16:30:42.630 回答
1

也许您需要的是路由器前缀。

转到 core.php 并添加以下行:

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

就是这样......你不需要添加路由......所以现在www.example.com/backend/settings/add将寻找backend_add()在设置控制器中调用的方法

并将www.example.com/settings/add调用add()设置控制器中调用的方法

在这里你会找到更好的例子=)

希望这可以帮助

于 2011-12-23T14:52:01.287 回答