Formの便利な使い方
開発環境:CakePHP2.5.1
問い合わせフォームや会員機能など、WEBサイトを作る際に必ず必要になるフォームですが、様々な便利機能があります。
Formのaccept-charsetを変更
フォームは基本的にapp/Config/core.phpで指定してあるApp.encodingの文字コードが設定されます。
これを一時的に別の文字コードに変更するには次のようにencodingを指定します。
<?php echo $this->Form->create('Contact', array('action' => 'index', 'encoding' => 'Shift_JIS')) . PHP_EOL; ?>
これでフォームのaccept-charsetはShift_JISに変更されます。
aタグでpostする方法
aタグにonclick属性をつけてpostでデータを渡そうとすると、細々書かないといけません。
ですが、CakePHPでは簡単に書くことができます。
ビューに次のように書きます。
<?php echo $this->Form->postLink('追加', array('action' => 'add')); ?>
そうすると、次のようなコードが生成されます。
<form action="/pages/add" name="post_53e15638842ba219502240" id="post_53e15638842ba219502240" style="display:none;" method="post"> <input type="hidden" name="_method" value="POST"/> </form> <a href="#" onclick="document.post_53e15638842ba219502240.submit(); event.returnValue = false; return false;">追加</a>
これで見た目は通常のaタグリンクと変わりありませんが、実際はFormのpostとして動くコードになります。
追加でパラメータを加えたい場合は、次のようにします。
<?php echo $this->Form->postLink('追加', array('action' => 'add', 'id' => 10)); ?>
すると、formのactionが/pages/addから/pages/add/id:10のようになります。
フォームから受け取ったデータかの判別方法
フォームでPOSTする場合、次のようなコードを書きます。
<?php echo $this->Form->create('Sample', array('type' => 'post')) . PHP_EOL; ?>
このフォームからデータを受け取ったかの判断をするには、Requestオブジェクトのisメソッドを利用します。
<?php if ($this->request->is('post')) { }
こんな感じでPostされた場合とそうでない時とを分岐させるのに利用できます。
フォームのデータをビューに渡す
フォームで受け取ったデータをビューに渡す場合、$this->setで渡さなくても下記の方法でビューで受け取ることができます。
<?php print_r($this->request->data); ?>