1

どうやって作るの?

domain.com/api/somecontroller/someaction

domain.com/somecontroller/someaction

同じコントローラー アクションを指します。

class somecontroller {

   function someaction() {

   }
}

注: 1 つのアクションだけを再ルーティングしたくありません。しかし、「api」プレフィックスなしで、domain.com/api/* のすべてのルートを対応する URL に再ルーティングしたいと考えています。

例えば:

domain.com/api/controller              ->  domain.com/controller
domain.com/api/controller/action       ->  domain.com/controller/action
domain.com/api/controller/action/param ->  domain.com/controller/action/param
domain.com/api/controller/action?key=val ->  domain.com/controller/action?key=val

routes.php に以下を追加してみました:

Router::connect('/api', array('controller'=>'index', 'action'=>'index'));
Router::connect('/api/:controller', array('action'=>'index'));
Router::connect('/api/:controller/:action');
Router::connect('/api/:controller/:action.:ext');

定義されたルールに対しては正常に機能します。しかし、私はすべてのシナリオをカバーしていないようです。URL パラメーター、またはプラグインやその他の高度な URL を使用すると失敗するように。

私が望むタスクを達成するためのより簡単な方法はありますか?

4

1 に答える 1

0

CakePHP のルーティング システムではワイルドカード (*) を使用できるため、これら 4 つのルールは必要ありません。

したがって、 app/Config/routes.php に、必要なものすべてをカバーするルールを 1 つだけ追加します。

Router::connect('/api/:action/*', array('controller' => 'mycontroller'));

次に、 http://domain.com/api/someactionのようなすべてのリクエストは、http://domain.com/mycontroller/someactionに到達します。

私のコード例で変更する必要があるのは、コントローラーの名前だけです。上記でmycontrollerを指定しています。

表示される:action部分は基本的に、リクエストで指定されたアクションのプレースホルダーであり、*はワイルドカードです。

于 2013-10-03T05:17:15.500 に答える