Phalcon3で\Phalcon\Mvc\Router\Groupクラスでコントローラをグループ化する

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);
view raw

gistfile1.txt

hosted with ❤ by GitHub

これで$api変数はV1Controllerを使用するようになります。

addGetメソッドでGETメソッドのアクションを指定できます。addPostメソッド、addPutメソッド,addDeleteメソッドがあります。

V1Controller.phpは以下にします。


<?php
declare(strict_types=1);
class V1Controller extends ControllerBase
{
public function indexAction()
{
echo 'OK';
}
}
view raw

gistfile1.txt

hosted with ❤ by GitHub

ビルトインサーバを起動します。

..\vendor\bin\phalcon.bat serve

GETメソッドを実行してOKが返ってくることが確認できます。

Phalcon3で\Phalcon\Mvc\Router\Groupクラスでコントローラをグループ化する

パスパラメータを追加する

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);
view raw

gistfile1.txt

hosted with ❤ by GitHub

addGetメソッドの第一引数のURIに{xx}とするだけです。これでV1Controller.phpのeditActionの第一引数にわたってきます。

V1Controller.phpです。


<?php
declare(strict_types=1);
class V1Controller extends ControllerBase
{
public function editAction($aaa)
{
echo $aaa;
}
}
view raw

gistfile1.txt

hosted with ❤ by GitHub

これでGETメソッドでアクセスすると、パスパラメータが表示されます。

パスパラメータが複数の場合

パスパラメータが複数のケースは往々にしてありますのでそのケースを考えます。

例えば以下のようなAPIの場合です。

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);
view raw

gistfile1.txt

hosted with ❤ by GitHub

これに対して、V1Controller.phpは以下のように引数を2つ渡します。


<?php
declare(strict_types=1);
class V1Controller extends ControllerBase
{
public function editAction($aaa, $bbb)
{
echo $aaa , ':' , $bbb;
}
}
view raw

gistfile1.txt

hosted with ❤ by GitHub

第一引数に{id}で指定した値が入ってきて、第二引数に{code}で指定した値が入ってきます。

クエリパラメータを設定する場合

次にクエリパラメータを処理したい場合です。

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);
view raw

gistfile1.txt

hosted with ❤ by GitHub

これに対して、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;
}
}
view raw

gistfile1.txt

hosted with ❤ by GitHub

request->getQueryメソッドを使用してクエリパラメータを取得してあげます。

Phalcon Documentation - Controllers
Official Phalcon Documentation

コメント

タイトルとURLをコピーしました