CakePHP : 投稿データの保存

メモ:  Category:php

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 としています。

bluenote by BBB