gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:03:23 28 4
gpt4 key购买 nike

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

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

关于cakephp 路由修改 Controller 名称/获取 Controller 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8617012/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com