【问题标题】:CakePHP 3 Rss errorCakePHP 3 Rss 错误
【发布时间】:2015-09-26 23:02:25
【问题描述】:

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

/posts/index.rss

当做这个请求时,它会返回一个找不到控制器的错误。

The action index.rss is not defined in PostsController

我声明“应用程序”接受 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();

我还在控制器的::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;
    ...
   }
}

怎么了?

谢谢..!!!

【问题讨论】:

  • 真的/plosts/index.rss?不应该是/post/index.rss吗?
  • 对不起,我写错了:) ...是/post/index.rss
  • 您将Router::extensions('rss'); 放在/config/routes.php 中? /logs/ 中还有其他错误消息吗?您是否在src/Template/Posts/rss/index.ctp 中创建了视图文件?
  • 是的,把它放在...Router::extensions(['json', 'xml', 'rss']);
  • 视图也已创建...仅给出错误未找到控制器...在我的调试器中->请求显示此插件(空)控制器帖子操作 index.rss _ext(null) pass( empty) isAjax(false) _ext 应该是 _ext(xml) 还是 _ext(rss) ?

标签: cakephp controller rss components cakephp-3.0


【解决方案1】:

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

因此,在作用域内,对 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

【讨论】:

  • 谢谢家伙...这解决了我的问题...现在我明白了这个问题...非常非常好...:)
猜你喜欢
  • 1970-01-01
  • 2016-05-10
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多