CakePHP 3 Rss 错误

CakePHP 3 Rss error

我想做一个 rss,我关注了这个 http://book.cakephp.org/3.0/en/views/helpers/rss.html。但是事情不正常,因为当访问rss的路由器时,它return是一个控制器错误,说控制器不存在。我的路线是这样的:

/posts/index.rss

当执行此请求时,return 找不到控制器的错误。

The action index.rss is not defined in PostsController

我声明 "app" 接受 rss..我的完整 config/routes。php

use Cake\Core\Plugin;
use Cake\Routing\Router;
Router::defaultRouteClass('Route');

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

    Router::extensions(['json', 'xml', 'rss']);
    $routes->connect('/', ['controller' => 'Fronts', 'action' => 'index']);
    $routes->connect('/contact', ['controller' => 'Fronts', 'action' => 'contact']);
    $routes->connect(
        '/:controller/:action/:id-:slug', 
        [], 
        [
            'pass' => ['id', 'slug'], 
            'id' => '[0-9]+',
            'routeClass' => 'DashedRoute'
        ]
    );

    $routes->fallbacks('InflectedRoute');
});

Plugin::routes();

我还在controller的::initialize()中做了LoadComponent

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

还有我的控制器

class PostsController extends AppController
{
    ...
   public function index()
   {
    ...
        if($this->RequestHandler->isRss()) :
            $_rss = $this->Posts->find()->limit(20);
            $this->set(compact('_rss'));
           return;  
        endif;
    ...
   }
}

怎么了?

谢谢..!!!

您定义扩展的方式有误,Router::extensions() 是为所有正在连接的路由定义全局扩展 after Router::extensions() has已被调用。

因此,在范围内,对 Router::extensions() 的调用为时已晚,因为它是 Router::scope() 方法,该方法在调用时读取全局扩展并将它们传递到范围中。

在范围外调用Router::extensions()

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

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

或在范围内使用RouterBuilder::extensions()(注意这会覆盖范围可能已被继承的全局扩展)

Router::scope('/', function (\Cake\Routing\RouteBuilder $routes) {
    $routes->extensions(['json', 'xml', 'rss']);
    // ...
});

另见 Cookbook > Routing > Routing File Extensions