0

ブログのウェブサイトにコメントモジュールを追加しようとしています。私がしたことは:

いいえ1<div>ブログ投稿view.phpにを追加してtblcomments/_formをレンダリングします

<?php 

        $model_comments = new TblComments;

   $this->renderPartial('/TblComments/_form',array(
            'comments'=>$model_comments,
        ));

 ?>

いいえ2:これは私のTblComments/_form.phpです

<

div class="form">

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

    <p class="note">Fields with <span class="required">*</span> are required.</p>

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

    <div class="row">
        <?php // echo $form->labelEx($model,'user_id'); ?>
        <?php echo $form->hiddenField($model_comments,'user_id'); ?>
        <?php echo $form->error($model_comments,'user_id'); ?>
    </div>

    <div class="row">
        <?php // echo $form->labelEx($model,'post_id'); ?>
        <?php echo $form->hiddenField($model_comments,'post_id'); ?>
        <?php echo $form->error($model_comments,'post_id'); ?>
    </div>
    <div class="row">
        <?php echo $form->labelEx($model_comments,'comment_body'); ?>
        <?php echo $form->textArea($model_comments,'comment_body',array('rows'=>5,'cols'=>35)); ?>
        <?php echo $form->error($model_comments,'comment_body'); ?>
    </div>
    <div class="row buttons">
        <?php echo CHtml::submitButton($model_comments->isNewRecord ? 'Create' : 'Save'); ?>
    </div>

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

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

問題はそれです:

Undefined variable: model_comments 

PS:そしてこのエラーは次の行のTblComments / _formファイルで発生しています:

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

私がすでに定義しているので、なぜこれが未定義なのか誰かが私に説明できますか?

4

2 に答える 2

2

単に追加します

  $model_comments =  new TblComments();

TblComments/_form.phpで

于 2012-10-31T06:39:34.697 に答える
1

これは、次の場合の小さな間違いです。

$this->renderPartial('/TblComments/_form',array(
    'comments'=>$model_comments,
));
// or even if you are using render()

モデルインスタンスに渡されたビューは、それを取得しますが、取得し$commentsません$model_comments。つまり、次のようにします。

$this->render('someview', array('model_there'=>$model_here));

ビューは使用する必要があり、を使用する必要は$model_thereありません$model_hereガイドで述べたように:

render()メソッドは、2番目の配列パラメーターを変数に抽出します。その結果、ビュースクリプトで、ローカル変数$var1と$var2にアクセスできます。


つまり、インスタンスの作成をコントローラーに移動してから、ビューに渡す必要があります。

// controller action
public function actionActionname($id){
    $model_here = new TblComments;
    $postmodel = loadModel($id);
    // ...
    $this->render('view', array(
        'postmodel'=>$postmodel,
        'model_there'=>$model_here
    ));
}

// in view.php
$this->renderPartial('/TblComments/_form', array(
    'model_there'=>$model_there
);

// then in _form you use $model_there
<?php echo $form->errorSummary($model_there); ?>
于 2012-10-31T08:24:46.263 に答える