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;
...
}
}
何が問題なのですか?
ありがとう.. !!!
拡張機能を間違った方法で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']);
// ...
});
クックブック>ルーティング>ルーティングファイル拡張子も参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加