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-2008 BBB All rights reserved.