Phalcon3で\Phalcon\Mvc\Router\Groupクラスでコントローラをグループ化する
Phalcon3で\Phalcon\Mvc\Router\Groupクラスを使ってコントローラをグループ化してみます。router.phpを以下のように変更します。
<?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は以下にします。
<?php | |
declare(strict_types=1); | |
class V1Controller extends ControllerBase | |
{ | |
public function indexAction() | |
{ | |
echo 'OK'; | |
} | |
} |
ビルトインサーバを起動します。
1 |
..\vendor\bin\phalcon.bat serve |
GETメソッドを実行してOKが返ってくることが確認できます。
パスパラメータを追加する
addGetメソッドにパスパラメータを追加することができます。この辺はRestfulではよくやります。
router.phpです。
<?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です。
<?php | |
declare(strict_types=1); | |
class V1Controller extends ControllerBase | |
{ | |
public function editAction($aaa) | |
{ | |
echo $aaa; | |
} | |
} |
これでGETメソッドでアクセスすると、パスパラメータが表示されます。
パスパラメータが複数の場合
パスパラメータが複数のケースは往々にしてありますのでそのケースを考えます。
例えば以下のようなAPIの場合です。
1 |
http://localhost:8000/v1/edit/{id}/{code} |
これをrouter.phpで書くと以下のようになります。
<?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つ渡します。
<?php | |
declare(strict_types=1); | |
class V1Controller extends ControllerBase | |
{ | |
public function editAction($aaa, $bbb) | |
{ | |
echo $aaa , ':' , $bbb; | |
} | |
} |
第一引数に{id}で指定した値が入ってきて、第二引数に{code}で指定した値が入ってきます。
クエリパラメータを設定する場合
次にクエリパラメータを処理したい場合です。
1 |
http://localhost:8000/v1/edit/{id}/{code}/?lang=ja |
パスパラメータを渡しつつ、クエリパラメータを渡したいなんてことがよくあります。
特に?lang=jaみたいな言語切り替えみたいなパラメータはパスパラメータではなくクエリパラメータで渡してあげます。
これをrouter.phpで書くと以下のようになります。
<?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つ渡しません。
<?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メソッドを使用してクエリパラメータを取得してあげます。
https://docs.phalcon.io/4.0/en/controllers.html
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^