CakePHP3 Rss错误

CakePHP3 Rss错误,cakephp,controller,rss,components,cakephp-3.0,Cakephp,Controller,Rss,Components,Cakephp 3.0,我想做一个rss,我遵循了这个。但是这些东西不能正常工作,因为当访问rss的路由器时,它返回一个控制器错误,说控制器不存在。我的路线是: /posts/index.rss 执行此请求时,它返回一个未找到控制器的错误 The action index.rss is not defined in PostsController 我声明“app”接受rss..My complete config/routes.php use Cake\Core\Plugin; use Cake\Routing\R

我想做一个rss,我遵循了这个。但是这些东西不能正常工作,因为当访问rss的路由器时,它返回一个控制器错误,说控制器不存在。我的路线是:

/posts/index.rss
执行此请求时,它返回一个未找到控制器的错误

The action index.rss is not defined in PostsController
我声明“app”接受rss..My complete 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();
我还在控制器的::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;
    ...
   }
}
还有我的控制器

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()
需要为调用
Router::extensions()
后连接的所有路由定义全局扩展

因此,在作用域内,调用
Router::extensions()
为时已晚,因为调用
Router::scope()
方法时会读取全局扩展并将它们传递到作用域中

调用范围之外的
Router::extensions()

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

Router::scope('/', function ($routes) {
    // ...
});
或者在作用域内使用
RouterBuilder::extensions()
(请注意,这会覆盖作用域可能继承的全局扩展)


另请参见

真的
/plosts/index.rss
?是不是应该是
/post/index.rss
?对不起,我写错了:)。。。是/post/index.rssYou放置的
Router::extensions('rss')
/config/routes.php
中?
/logs/
中是否有其他错误消息?你是否在
src/Template/Posts/rss/index.ctp中创建了一个视图文件?是的,把它放在…Router::extensions(['json','xml','rss']);视图也被创建了…只给出了找不到控制器的错误…在我的调试器->请求显示此插件(null)控制器发布操作索引.rss\u ext(null)pass(empty)isAjax(false)\u ext应该是\u ext(xml)或\u ext(rss)?谢谢家伙…这解决了我的问题…现在我理解了这个问题…非常非常非常好…)