2017-03-12 17 views
0

私は現在RestApi plugin for CakePHP 3を使用していますが、私はそうのように、URLに拡張子.jsonを追加できるようにしたい:CakePHPのルーティングJSONレスポンス

domain.com/api/search/abc.json 

CakePHPのドキュメントに続きcreating RESTful routesについて私はスローせずに拡張を使用することができましたエラー。応答は

public function search($term=''){ 
    $this->httpStatusCode = 200; 
    $this->apiResponse['term'] = $term; 
} 

です

私は私がしなければ、これは、私のroutes.phpの上で私のコントローラで(全体のコードを追加するには、[編集])

use Cake\Core\Plugin; 
use Cake\Routing\RouteBuilder; 
use Cake\Routing\Router; 
use Cake\Routing\Route\DashedRoute; 

Router::defaultRouteClass(DashedRoute::class); 

Router::scope('/', function (RouteBuilder $routes) { 
    $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); 

    $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']); 

    $routes->fallbacks(DashedRoute::class); 
}); 

Plugin::routes(); 
Router::scope('/', function ($routes) { 
    $routes->extensions(['json']); 
}); 

これを持っています

{ 
    "status": "OK", 
    "result": { 
     "term": "abc.json" # Notice the .json 
    } 
} 

abc.jsonとなりました。abcとなりました。

何か間違っていますか?または.json$termから削除する予定ですか?

+0

どこ実際に構成された拡張機能を利用するだろうルートはありますか? – ndm

+0

あなたはこれを意味しますか? '$ routes-> resources( 'Searches');'? – rlcabral

+0

たとえば、実際のルートを見ることなく、誰も何が間違っているのかを知ることはできません。あるいは、少なくとも問題の可能性を排除できます。あなたの質問に表示されているルートスニペットは何もしません。 – ndm

答えて

2

既存のスコープを再利用すると、接続されたルートが同じルートコレクションにマージされますが、RouteBuilder::extensions()への呼び出しは、以前に接続されたルートには通常影響しませんし、再利用/再オープンスコープにも影響しません。ドキュメントから

引用:このビルダー経由で接続

今後のルートが適用される接続 の拡張子を持つことになります。ただし、内線番号を設定しても既存のルートは変更されません。

API > \Cake\Routing\RouteBuilder::extensions()

そこextensions()コールに接続されているルートに影響するようにあなたは、既存のルーティング範囲にextensions()呼び出しを追加する必要があります。

も参照してください

関連する問題