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']);
// ...
});
我想做一个 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']);
// ...
});