【问题标题】:Cakephp RESTful routing with PluginCakephp RESTful 路由与插件
【发布时间】:2016-09-09 17:53:24
【问题描述】:

使用 Cake 2.x 我正在尝试将 RESTful 流量路由到我的用户控制器到我的用户管理插件。

我的路线如下:

// re-redirect root traffic to login
Router::connect('/', array('plugin'=>'UserManagement','controller' => 'Users', 'action' => 'login'));  

CakePlugin::routes();  
Router::mapResources(['users']);

Router::parseExtensions();

我也试过了:

Router::mapResources(['UserManagement']);

当我调用 resful url 时,我收到以下错误:

users/1.json

{
    "code": 404,
    "name": "Action UsersController::51() could not be found.",
    "message": "Action UsersController::51() could not be found.",
    "url": "\/users\/51.json"
}

提前致谢。

【问题讨论】:

    标签: cakephp routing


    【解决方案1】:

    遵循 CakePHPs 约定优于配置的方法,您可以像在其他任何地方一样使用插件语法指定插件,即在插件名称前面加上一个点与控制器名称分隔

    Router::mapResources('UserManagement.Users');
    

    这当然也需要你在请求 URL 中使用插件名称,即

    /user_management/users/51.json
    

    而不仅仅是

    /users/51.json
    

    如果您想使用后者,但仍然连接到插件,那么您可以尝试prefix 选项技巧,即提供默认值/,这会阻止路由器使用插件名称作为前缀(不要与实际的 prefix routing 混淆)。

    Router::mapResources('UserManagement.Users', array(
        'prefix' => '/'
    ));
    

    另见

    【讨论】:

    • 谢谢你,但这仍然不起作用 - 404 "name": "Action UsersController::51() could not be found.",
    • @AlanA 可能是因为您在 URL 中缺少插件名称,即您访问的是/users/51.json,而不是必需的/user_management/users/51.json。如果您追求的是前一种格式,即在连接插件时使用/users/...,那么请在您的问题中指出。
    • 是的,我只使用了我的问题中写的 url 中的控制器名称。使用插件名称虽然有效:) 如果我只想使用 'user's 而不是 url 中的插件名称,那也可以吗?
    • @AlanA 使用mapResources() 只能通过一种“技巧”,即提供/ 的默认prefix 选项,这将停止使用插件作为前缀(而不是与前缀路由混淆)。另请参阅我的更新答案。
    猜你喜欢
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2014-01-03
    • 2011-09-26
    相关资源
    最近更新 更多