CakePHP 3 Routingの_name オプション が便利すぎる。
どうもfujiharaです。
本日で1年の4分の3が終わったわけですが早くないですか?
昨年の日本のハロウィンがーーって話がつい最近の気がしてなりません。
本日はCakePHP 3 の新しいRoutingで凄い便利だったものをご紹介致します。
Routing
抜粋:ルーティングは URL をどコントローラーのアクションと関連付けてマッピングするか決める機能です。
ルーティングより抜粋
例えば /login にアクセスが有った場合にAccountsコントローラのloginメソッドを実行するなどの指定が可能です。 CakePHP2 の場合は以下のように設定していました。
//CakePHP2の場合
Router::connect(
'/login',
['controller' => 'accounts', 'action' => 'login'],
[] //option
);
CakePHP3の場合も基本的な形は同じですが、ここで超便利なオプション_nameが指定できます。
Router::connect(
'/login',
['controller' => 'Accounts', 'action' => 'login'],
['_name' => 'login']
);
こうするとビューテンプレート内でリンクを表示する際にすごく便利です。
//CakePHP2 の場合
$this->Html->link('ログイン', ['controller' => 'accounts', 'action' => 'login']);
//CakePHP3 の場合
$this->Html->link('ログイン', ['_name' => 'login']);
以下テストです
## tests/TestCase/Route/RouteTest.php
public function testNameRouting()
{
$this->assertEquals('login', Router::url(['_name' => 'login']));
}
まとめ
いかがでしたでしょうか、すごく便利じゃないですか?
またCakePHP2の書き方で表示されたリンクでは controller や action の名前が
間違っていたとしてもリンク自体は表示されており、リンクをクリックして間違いに気づく。と言った感じでした。
しかし、CakePHP3の_nameを使用した際は、_nameの値が間違っていると表示時にエラーが発生しますので、
ミスに気づくやすくなりました。
皆さんも是非お試しください。