2014年5月22日木曜日

FormHelperのpostLink

CakePHPを導入したらCookbookにある
「ブログチュートリアル」をベースに進めていくと大変わかり易い。

そこにある「記事投稿の削除」では、GETリクエストで投稿を削除するのはWEBクローラが不要に削除するので危険であるとあるので、POSTリクエストによる削除を行うことにするが、記事の追加、投稿記事の編集のようにFormHelperをつかって、createからendまで書くのは手間である。

そこで、postLinkというものがあるのでこれを解析してみる。

echo $this->Form->postLink('Delete', array('action' => 'delete', $post['Post']['id']), array('confirm' => 'Are you sure?'));

を書き、実際にページを作成してブラウザ(※Google Chromeを使用している)で表示したところで、
”Delete”リンクで右クリックし、”要素の検証”をクリックするとブラウザの下部に要素(ソースの一部)が表示される。

上記のpostLinkの箇所が以下のようになっているのがわかる。

  1. <form action="/cakephp/posts/delete/5" name="post_537d6ddaf1adf620659485" id="post_537d6ddaf1adf620659485" style="display:none;" method="post”>
  2.      <input type="hidden" name="_method" value="POST”>
  3. </form>
  4. <a href="#" onclick="if (confirm("Are you sure?")) { document.post_537d6ddaf1adf620659485.submit(); } event.returnValue = false; return false;">Delete</a>
つまり、postLinkは、1〜3行目で、method=“post”のaction="/cakephp/posts/delete/5”のformタグを作成して、非表示としている(display:none)
その上で、4行目にて”Delete”としたaタグのonclickイベントで、先のformをsubmitするようになっている。
formのidは、自動で付加されているらしい。
また、postLinkでconfirmを指定しているので、確認ダイアログが出るようになっている。



0 件のコメント:

コメントを投稿