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

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

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の場合です。

これを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}で指定した値が入ってきます。

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

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

パスパラメータを渡しつつ、クエリパラメータを渡したいなんてことがよくあります。

特に?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メソッドを使用してクエリパラメータを取得してあげます。

https://docs.phalcon.io/4.0/en/controllers.html

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA