CakePHP : 投稿データの保存
「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 としています。