かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

CakePHP3 View TemplateでURLのリンクを作りたい。

例えばController Articles、action edit/articles/edit/{article_id}の様なURLが作りたい時

1. Htmlヘルパーを使う

<?php
// $article_id = 1;
echo $this->Html->link('編集', [
    'controller' => 'Articles',
    'action' => 'add',
    $article_id
  ],
  ['class' => 'btn']);

<a href="/articles/add/1" class="btn">編集</a>というaタグが出力されます。

2. Urlヘルパーを使う

<?php
// $article_id = 1;
$url = $this->Url->build([
  'controller' => 'Articles',
  'action' => 'add',
  $article_id
]);
echo $url

/articles/add/1 というURLが作られます。

Html->link(), $Url->build() 共に配列のactionの後の値にキーを付けて渡すとURLのパラメータになる

1. Htmlヘルパー

<?php
// $article_id = 1;
echo $this->Html->link('編集', [
    'controller' => 'Articles',
    'action' => 'add',
    'article_id' => $article_id
  ],
  ['class' => 'btn']);

出力

<a href="/articles/add?article_id=1" class="btn">編集</a>

2. Urlヘルパー

<?php
// $article_id = 1;
$url = $this->Url->build([
  'controller' => 'Articles',
  'action' => 'add',
  'article_id' => $article_id
]);
echo $url

出力

/articles/add?article_id=1

このURLはControllerの引数でidを受け取れないので注意が必要

<?php
// ArticlesController
namespace App\Controller;
use Cake\Controller\Controller;

class ArticlesController extends AppController {
  /* 略 */
  public function edit($article_id = null) {
    // /articles/add?article_id= のパラメータでアクセスすると 引数の$article_id は null になっている
  }
}

感想

もしかして、CakePHP3の情報ってまだ少ないのでしょうか...
CakePHPやってみるぞーと始めたのですがCakePHP3で検索しても本もあまり見当たらず...


[参考]

大室家 (1) 限定版 (IDコミックス 百合姫コミックス)

大室家 (1) 限定版 (IDコミックス 百合姫コミックス)