Phalcon3で\Phalcon\Mvc\Router\Groupクラスでコントローラをグループ化する
Phalcon3で\Phalcon\Mvc\Router\Groupクラスを使ってコントローラをグループ化してみます。router.phpを以下のように変更します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$router = $di->getRouter(); | |
// V1Controllerでグルーピング | |
$api = new \Phalcon\Mvc\Router\Group([ | |
'controller' => 'v1' | |
]); | |
$api->addGet('', ['action' => 'index']); // GETメソッドのみ、indexActionメソッド実行 | |
$router->mount($api); |
これで$api変数はV1Controllerを使用するようになります。
addGetメソッドでGETメソッドのアクションを指定できます。addPostメソッド、addPutメソッド,addDeleteメソッドがあります。
V1Controller.phpは以下にします。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
declare(strict_types=1); | |
class V1Controller extends ControllerBase | |
{ | |
public function indexAction() | |
{ | |
echo 'OK'; | |
} | |
} |
ビルトインサーバを起動します。
..\vendor\bin\phalcon.bat serve
GETメソッドを実行してOKが返ってくることが確認できます。
パスパラメータを追加する
addGetメソッドにパスパラメータを追加することができます。この辺はRestfulではよくやります。
router.phpです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$router = $di->getRouter(); | |
// Define your routes here | |
$api = new \Phalcon\Mvc\Router\Group([ | |
'controller' => 'v1' | |
]); | |
$api->addGet('/edit/{id}', ['action' => 'edit']); // {id}がパスパラメータ | |
$router->mount($api); |
addGetメソッドの第一引数のURIに{xx}とするだけです。これでV1Controller.phpのeditActionの第一引数にわたってきます。
V1Controller.phpです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
declare(strict_types=1); | |
class V1Controller extends ControllerBase | |
{ | |
public function editAction($aaa) | |
{ | |
echo $aaa; | |
} | |
} |
これでGETメソッドでアクセスすると、パスパラメータが表示されます。
パスパラメータが複数の場合
パスパラメータが複数のケースは往々にしてありますのでそのケースを考えます。
例えば以下のようなAPIの場合です。
http://localhost:8000/v1/edit/{id}/{code}
これをrouter.phpで書くと以下のようになります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$router = $di->getRouter(); | |
// Define your routes here | |
$api = new \Phalcon\Mvc\Router\Group([ | |
'controller' => 'v1' | |
]); | |
$api->addGet('/edit/{id}/{code}', ['action' => 'edit']); | |
$router->mount($api); |
これに対して、V1Controller.phpは以下のように引数を2つ渡します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
declare(strict_types=1); | |
class V1Controller extends ControllerBase | |
{ | |
public function editAction($aaa, $bbb) | |
{ | |
echo $aaa , ':' , $bbb; | |
} | |
} |
第一引数に{id}で指定した値が入ってきて、第二引数に{code}で指定した値が入ってきます。
クエリパラメータを設定する場合
次にクエリパラメータを処理したい場合です。
http://localhost:8000/v1/edit/{id}/{code}/?lang=ja
パスパラメータを渡しつつ、クエリパラメータを渡したいなんてことがよくあります。
特に?lang=jaみたいな言語切り替えみたいなパラメータはパスパラメータではなくクエリパラメータで渡してあげます。
これをrouter.phpで書くと以下のようになります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$router = $di->getRouter(); | |
// Define your routes here | |
$api = new \Phalcon\Mvc\Router\Group([ | |
'controller' => 'v1' | |
]); | |
$api->addGet('/edit/{id}/{code}?lang={val}', ['action' => 'edit']); | |
$router->mount($api); |
これに対して、V1Controller.phpは以下のように引数を2つ渡します。3つ渡しません。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
declare(strict_types=1); | |
class V1Controller extends ControllerBase | |
{ | |
public function editAction($aaa, $bbb) | |
{ | |
$lang = $this->request->getQuery('lang'); // getQueryでキー指定してクエリパラメータを取得する | |
echo $aaa , ':' , $bbb , ':', $lang; | |
} | |
} |
request->getQueryメソッドを使用してクエリパラメータを取得してあげます。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント