CakePHP : 投稿フォームの作成(フォームヘルパーの使い方)

ビューに次のアクションを追加する(get)でHTMLヘルパーを使ってリンクを 作成しました。

ここでは、フォーラムの投稿に使用するフォームを作成してみます。フォームも同じようにヘルパー を使って作成することができます。

フォームを作成する

投稿フォームのテンプレートは、次のように作成します。

<?php echo $html->formTag('/forums/post'); ?>
<?php echo $html->hidden('Discussion/categoryid',array('value' => $categoryid)); ?>
<div>
    <label for="subject">件名:</label>
    <?php echo $html->input('Discussion/subject',array('size' => 50)); ?>
</div>
<div>
    <label for="name">名前:</label>
    <?php echo $html->input('Discussion/name',array('size' => 50)); ?>
</div>
<div>
    <label for="body">内容:</label>
    <?php echo $html->textarea('Discussion/message',array('cols' => 65,'rows' => 20)); ?>
</div>
<div>
    <?php echo $html->submit('投稿'); ?>
</div>
</form>

上から順に、formタグを出力してくれなヘルパーに「action属性(アドレス)」を指定します。この関数は、第二引数に メソッド、第三引数にその他の属性を指定することができます。デフォルトで第二引数が「POST」となっているので、 アドレスのみ指定しています。

対象としているカテゴリーIDを隠し(hidden)項目として設定しています。

次に「件名」と「名前」を入力するインプットボックスを作成します。インプットボックスを 作成するには、HTMLヘルパーのinput関数を使用し、第一引数に「モデル名」と「項目名」を「/」で 区切って指定します。第二引数には、inputタグに指定する属性を設定します。

同様にtextareaもHTMLヘルパーを使用して作成することができます。属性を設定する場合、配列を使用し 複数の属性を設定することができます。

「submit」ボタンもHTMLヘルパーで作成することができ、ボタンに表示する名称を第一引数に指定します。

フォームタグを閉じるヘルパーは、用意されていないようなので自前で記述します。

表示イメージ

作成したテンプレートを表示すると次のように表示されます。

表示イメージ

出力されるHTMLは、次のようになります。

<form action="/app/forums/post" method="post">
<div>
    <label for="subject">件名:</label>
    <input name="data[Discussion][subject]"  size="50" value="" type="text" id="DiscussionSubject" />
</div>
<div>
    <label for="name">名前:</label>
    <input name="data[Discussion][name]"  size="50" value="" type="text" id="DiscussionName" />
</div>
<div>
    <label for="body">内容:</label>
    <textarea name="data[Discussion][message]"  cols="65" rows="20" id="DiscussionMessage"></textarea>
</div>
<div>
    <input type="submit" value="投稿" />
</div>
</form>

フォームに入力された値は、data[モデル名][フィールド名]の形で配列に格納されます。