CakePHP : 投稿フォームの作成でフォームを表示し POSTするように作成しました。
<?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>
ここでは、POSTされたデータをデータベースに保存してみます。
フォームタグのactionに指定したURLに対応するアクション(メソッド)をコントローラーに作成します。
class ForumsController extends AppController { var $name = 'Forums'; var $uses = array('Category','Discussion'); ・・・・・・・ function post() { } }
ポストされた値をデータベースへ保存するには、モデルのsaveメソッドを使用します。
モデルは、データベースのテーブルと対応付けられており保存するデータを次のような構造にしておくことで テーブルにデータを反映します。
Array ( [モデル名] => Array ( [データベースの項目名1] => 'value' [データベースの項目名2] => 'value' ) )
作成した投稿フォームのソースを確認すると、name属性に「data[モデル名][データベースの項目名]」と 作成されていることが確認できます。
<input name="data[Discussion][subject]" size="50" value="" type="text" id="DiscussionSubject" />
コントローラーには、「data[モデル名][データベースの項目名]」の形で値が渡されるのでモデルのsaveメソッドを 使用してテーブルに値を反映します。
class ForumsController extends AppController { var $name = 'Forums'; var $uses = array('Category','Discussion'); ・・・・・・・ function post() { $this->Discussion->Save($this->data); $this->redirect('/forums/index'); } }
データ保存後のredirectは、保存後に表示するURLを指定しています。ここでは、とりあえずindexとしています。
Copyright 1997-2010 BBB All rights reserved.