CakePHP 3 のアクションに可変長引数リストを使う

はじめに

PHP では可変長引数リストが使えて、関数に可変数の値を渡すことができます。

ふと思い立って、CakePHP 3 のアクションで試したところ、ここでも使えることがわかりました。今日は検証用に作ったプログラムのソースと併せて、使い方をご紹介します。

今回使用した CakePHP のバージョンは 3.8.5 です。

使い方

実装は簡単で、PHPの仕様通り、アクションの引数の前に「...」をつけるだけです。検証のために作ったコードは以下の通りです。

/src/Controller/SampleController.php
<?php
namespace App\Controller;

class SampleController extends AppController
{
    public function detail(...$paths) {
        debug($paths);
        exit;
    }
}

これで http://example.com/sample/detail/hoge1/hoge2/ のようにアクセスすると、下記のように表示されます。

\src\Controller\SampleController.php (line 7)

[
    (int) 0 => 'hoge1',
    (int) 1 => 'hoge2'
]

/detail/hoge1/hoge2/hoge3 でアクセスすれば、$paths の要素数は3つになります。

さて、今回は興味本位で試しただけで、まだ実用はしていません。

ぱっと思い浮かぶ使い道としては、ブログや CMS で URL 名を登録する場合に、スラッシュを使うことで、疑似的にディレクトリ構造を持たせるようにする、というような使い方ですかね。