PHP
CakePHP
Smarty

CakePHP+SmartyでのpostLink使用上の注意

はじめに

私のような人が今後出ないようにメモしておきます。
ちなみに私はPHPはほぼ初心者なので、上級者の方はこんなことでは躓かない…のかもしれません。

確認ダイアログを出した上で選択されたレコードを削除して」と言われたので…

CakePHPにはFormHelper::postLink()メソッドというものがあります。
参考になる記事はこちら
その記事の中で以下の通り例があったわけです。

postlink.php
<?php echo $this->Form->postLink('Submit', array('controller' => 'Hoges', 'action' => 'complete'), array('data' => $data)); ?>

第2引数で、連想配列でControllerとActionを指定、第3引数ではFormのデータおよびaタグのattributeをやはり連想配列で指定するようになっています。
というわけで以下みたいに作ったところ…PhpStorm上でエラー発生。

postlink.tpl
{$this->Form->postLink('削除',
array('controller' => 'ProgressList', 'action' => 'delete'),
array('data' => $project_id, 'class' => 'btn2', 'style' => 'background: red; font-weight: normal; text-decoration: none'), 
'削除してよろしいでしょうか?')}

まぁこれは理由は簡単で、Smartyのtpl内ではPHPの関数がそのまま使えないんでエラーになってしまっていたわけです(私はしばらく気が付きませんでしたが)
気を取り直して、array関数を使っていたところをリテラルで書き直して、これでいける…と思いきや、第3引数から作られるはずのhidden属性のinputタグが作られない…。

postlink.tpl
{$this->Form->postLink('削除',
['controller' => 'ProgressList', 'action' => 'delete'],
['data' => $project_id, 'class' => 'btn2', 'style' => 'background: red; font-weight: normal; text-decoration: none'], 
'削除してよろしいでしょうか?')}

ここの説明だと、第3引数にdataというキーの連想配列のレコードを作っておくとhidden属性のinputタグが作られるはずなのに…。
頭を抱えること小一時間、記事を読んでようやく第3引数にはdataというキーでFormデータを格納しなくてはならないことにようやく気付く。
そしてようやくたどり着いたのが↓

postlink.tpl
{$this->Form->postLink('削除',
['controller' => 'ProgressList', 'action' => 'delete'],
['data' => ["project_id" => $project_id], 'class' => 'btn2', 'style' => 'background: red; font-weight: normal; text-decoration: none'], 
'削除してよろしいでしょうか?')}

まとめ

すげー時間かかった…。
とりあえず次回同じことでハマらないようにしたいです…。