cakePHP 3.0 Action PagesController::myaction.json() 无法找到,或无法访问。”

Kei*_*wer 1 cakephp cakephp-3.0

我正在将现有的 2.5 应用程序迁移到 3.0。使用 ajax 时出现 404 错误。这在 cakePHP 2.5 中运行良好

网址:“/cakephp3/pages/myaction.json”

我没有看到任何我可能错过的步骤。

我确定这是 .json 扩展名的路由问题

路由文件

Router::scope('/', function ($routes) {

    Router::extensions(['json', 'xml']);

    $routes->connect('/', ['controller' => 'Pages', 'action' => 'home']);
    $routes->connect('/hotel-training-courses', ['controller' => 'pages', 'action' => 'trainingCourses']);
    $routes->connect('/feature-tour', ['controller' => 'pages', 'action' => 'features']);
    $routes->connect('/contact-us', ['controller' => 'pages', 'action' => 'contact']);
    $routes->fallbacks('InflectedRoute');
});
Run Code Online (Sandbox Code Playgroud)

页面控制器.php

public function initialize()
{
    parent::initialize();
    $this->loadComponent('RequestHandler');
}

public function myaction(){

    $this->request->onlyAllow('ajax');

    $userName = $this->request->data['name'];
    $userCompany = $this->request->data['company'];
    $userEmail = $this->request->data['email'];
    $userPhone = $this->request->data['phone'];

    //send an email

}
Run Code Online (Sandbox Code Playgroud)

以前的应用程序能够检测请求类型并以相同的类型返回。无需设置渲染。

ndm*_*ndm 5

全局扩展必须在作用域之外定义

Router::extensions() 必须放置在定义任何范围和路由之前调用的所有路由之外,如果它应该应用于所有路由。

如果您想将扩展解析限制为特定范围,请使用RouteBuilder::extensions(),即

Router::extensions(['json', 'xml']);

Router::scope('/', function (RouteBuilder $routes) {
    $routes->connect('/', ['controller' => 'Pages', 'action' => 'home']);
    //...
});
Run Code Online (Sandbox Code Playgroud)

或者

Router::scope('/', function (RouteBuilder $routes) {
    $routes->extensions(['json', 'xml']);

    $routes->connect('/', ['controller' => 'Pages', 'action' => 'home']);
    //...
});
Run Code Online (Sandbox Code Playgroud)

请参阅说明书 > 路由 > 路由文件扩展名

Request::onlyAllow() 不再存在

Request::onlyAllow()已重命名为Request::allowMethod(),因此这是您将遇到的下一个问题。

启用调试模式

此外,您应该启用调试模式,以便您收到带有适当详细信息的有意义的错误消息,这是调试此类问题所必需的。