1

私は MVC と Yii フレームワークにかなり慣れていないため、私の質問がかなりばかげている可能性があります。もしそうなら、私の謝罪を事前に受け入れてください。

Web サイトの管理セクションに、ユーザーがコンテンツを投稿できるフォームを作成したいと考えています。サンプルブログのチュートリアルに従いましたが、データベースでテキストとして定義されているフィールド (フォームのテキストエリア) に追加されたコンテンツは、フォームを送信した後に更新されないようです (他のすべては正常に動作します)。これが私のテーブルのSQLステートメントです:

CREATE TABLE `tbl_show` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `presentation` text,
    PRIMARY KEY (`id`),
    KEY `fk_tbl_show_tbl_season1` (`tbl_season_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

私は Gii を使用してモデルと CRUD を作成しました。関連する可能性のある部分のみをここに追加します。

私のコントローラーで:

    public function actionCreate()
{
    $model=new Show;

    if(isset($_POST['Show']))
    {
        $model->attributes=$_POST['Show'];
        if($model->save())
                    {
                        $this->redirect(array('view','id'=>$model->id));
                    }   
    }
    $this->render('create',array(
        'model'=>$model,
    ));

と私の _form.php:

<div class="form">

 <?php $form=$this->beginWidget('CActiveForm', array(
 'id'=>'show-form',
 'enableAjaxValidation'=>false,
  )); ?>

<?php echo $form->errorSummary($model); ?>

    <div class="row">
    <?php echo $form->labelEx($model,'presentation'); ?>
    <?php echo $form->textArea($model,'presentation',array('rows'=>6, 'cols'=>50)); ?>
    <?php echo $form->error($model,'presentation'); ?>
</div>

<div class="row buttons">
    <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>

    <?php $this->endWidget(); ?>

    </div><!-- form -->

モデルのルール:

return array(
    array('id, presentation', 'safe', 'on'=>'search'),
);

テキスト コンテンツのみが更新されない理由がわかりません。データベースでは null として表示されます。

前もってありがとう、乾杯、マサ

4

3 に答える 3

6

属性を safe にする必要があります。Showこれをモデルの検証ルールに追加します

array('presentation','safe')
于 2012-05-23T14:45:17.057 に答える
0

フォームが正しく送信されないという問題が見つかりました。誰かが同じ問題を抱えている場合に備えて、ここに追加します。

beforeSave を上書きしましたが、後で完了したかったので、何も返されませんでした。

protected function beforeSave() {
        if(parent::beforeSave())
        {
            if($this->isNewRecord)
            {
               //things that should be added by the system
            }
        }

    }

これにコメントした後、すべて正常に動作します。また、皆さんが推奨したように、検証のないフィールドを安全なルールに追加しました。

于 2012-05-29T15:49:17.727 に答える
-1

これを試して ..

public function actionCreate()
{
    $model=new Show;

    if(isset($_POST['Show']))
    {
        $model->attributes=$_POST['Show'];

        $save = $model->save(false);      // write like this...
        if($save)
                    {
                        $this->redirect(array('view','id'=>$model->id));
                    }   
    }
    $this->render('create',array(
        'model'=>$model,
    ));

それがあなたのために働くことを願っています..

于 2012-05-24T05:04:32.633 に答える