CodeLab技術ブログ

プログラミング技術まとめ

[cakephp2]Form->submitのタイトルでHTMLを使いたかったができない件

一昔前は、HTMLのボタンなどのパーツを修飾したい場合は画像を使うことが多かったですが、最近の流行りはすべてCSSであらわすのが主流かと思います。
ということで、ボタンをCSSで修飾してみたのですが…

CakePHP2.10 でのお話。

たとえば、HtmlヘルパーのLinkでは

<?= $this->Html->link('<i class="fa fa-search"></i>&nbsp;検索',"#",['escape'=>false]);?>

こんな感じで、第3引数のパラメータにescape=falseを追加すればよいです。
意図通り出力されました。

<a href="#"><i class="fa fa-search"></i>&nbsp;検索</a>

じゃ、Form->submit()でも同じかなとおもって同じようにやってみると…

<?= $this->Form->submit('<i class="fa fa-search"></i>&nbsp;検索',['escape'=>true,'div'=>false,'class'=>'btn btn-default ']);?>
<input class="btn btn-default" type="submit" value="<i class=&quot;fa fa-search&quot;></i>&amp;nbsp;検索">

なんでvalueにはいるねん!というか、buttonタグじゃなくてinputタグなんだ…。
公式サイトにescapeオプションへの言及がなかったのですが、やってみるとHTML エンティティへの変換の有無のようです。value属性の中身にそのまま突っ込むのはやばいですのでだめですね。

なお、FormヘルパーのButtonメソッドで出してもinputタグで出力されますので、同じことでした。
ということで、Formヘルパーから出すのは無理っぽいです。

単なるリンクであれば、Html->linkメソッドでボタンっぽく見せてあげればいいんですけどね。
aタグでもPostできるようにJavaScriptを書いてあげればできなくはないのですが、なんかちょっとそこまでしなくてもとは思います。

Tagメソッドで組み立ててもいいけど・・・まぁ無駄この上ないので、素直にHTMLをべた書きするのが良いかと思います。
セキュリティーコンポーネントにも影響はなさそう。

コメントは受け付けていません。