Yii:从一个角度来说,我是如何找到一个变量的来源的


Yii: from a view, how do I found out where a variable came from?

在传递给我的Yii项目中,有一个函数可以在单击按钮/链接Comment时创建(或显示?)文本框。从那里,用户可以创建注释,这些注释将显示在一行中。

我想看看我是否可以创建一个编辑评论功能,所以我想我可以通过复制评论功能来实现这一点——它会显示一个文本框,用户可以在其中输入新的文本。它将编辑现有的评论,而不是添加新的评论。

但我遇到了一个障碍,因为很明显,view.php使用了一个变量,而我一辈子都想不出如何在_comments.php中使用这个变量——负责显示个人评论的文件afaik。

这是view.php:的代码

</script>
<?php
$this->breadcrumbs=array('Forums'=>array('index'),$model->title,);
?>
<?php 
    if(Yii::app()->user->hasFlash('message')):
        echo '<script>alert("'.Yii::app()->user->getFlash('message').'");</script>'; 
    endif;
?>
<?php $starter = Persons::model()->findByAttributes(array('party_id'=>$model->party_id));?>
<div id="forum_main_box">
    <div class="comment-icon-textbox">
        <?php echo CHtml::ajaxLink('Comment',array('forum/callcommentform'),
              array(
                'update' => '#render_div'.$model->id,
                'data'=>array('id'=>$model->id),
              )); ?>
    </div>
    <?php endif; ?>
    <div id="forum_comment_headerbox">
    </div>
    <div>
        <?php
        $this->widget('zii.widgets.CListView',
                array(
                    'dataProvider'=>$dataProvider,
                    'itemView'=>'_comments',
                    'summaryText'=>'',
                )); 
        ?>
        <div id="render_div<?=$model->id?>" class="comment-form">
        </div>
    </div>
</div>

在这个代码中,下面是我提到的Comment链接:

<?php echo CHtml::ajaxLink('Comment',array('forum/callcommentform'),
    array(
        'update' => '#render_div'.$model->id,
        'data'=>array('id'=>$model->id),
    )); ?>
<?php } ?>

这个块显示评论列表,以及当点击上面的Comment时,文本框将弹出的空间(我认为是):

<?php
$this->widget('zii.widgets.CListView',
    array(
        'dataProvider'=>$dataProvider,
        'itemView'=>'_comments',
        'summaryText'=>'',
    )); 
?>
<div id="render_div<?=$model->id?>" class="comment-form">
</div>

请注意,两者都使用了$model。它最初以$model->title的形式出现在代码中。

这里是_comments.php的缩短版本,用于注释行和注释框。

<?php $comment = $data; ?>
<div class="other-member-comment-box">
    <?php $person=Persons::model()->findByAttributes(array('party_id'=>$comment->party_id)); ?>
    <?php 
        $country=Lookup_codes::model()->findByAttributes(array('id'=>$person->country)); 
        $location = empty($country) ? '' : ' - '.$country->name;
        // $model->title;
    ?>
    <?php if (Yii::app()->user->id == $person->party_id || Yii::app()->partyroles->isAdmin()) { 
    ?>
    <p class="admin-commands">
        <?php echo CHtml::link(CHtml::encode('Edit'),array('forum/editcomment','reply'=>$data->id,'topic'=>$data->content_id)); ?>
        <?php echo CHtml::ajaxLink('EditTestComment',array('forum/callcommentform'),array('update' => '#render_div'.$model->id,'data'=>array('id'=>$model->content_id),)); ?>
        <?php echo CHtml::link(CHtml::encode('Delete'),array('forum/delete','reply'=>$data->id,'topic'=>$data->content_id),array('confirm'=>'Are you sure you want to delete this item?')); ?>
        <div id="render_div<?=$model->id?>" class="comment-form">
        </div>
    </p>
    <?php } ?>
</div>

<p class="admin-commands">下,有一个EditTestComment链路,它是来自view.phpComment代码的直接拷贝。当然,这不起作用,因为这个:

2016/04/07 10:24:03[error][php]未定义变量:型号

$modelview.php中来自哪里?因为在_comments.php中的任何地方放同一行($model->title)只会进一步破坏它。

编辑:这是控制器的CallComment部分:

public function actionCallCommentForm($id='')
{
    $topic=Forum::model()->findByPk($id);
    $this->renderPartial('_commentform', array(
        'forum'=>$topic,
        'model'=>new Comment,
        //'view'=>array('view','id'=>$id),
        'view'=>'view',
    ));
}

$model变量最初来自控制器。它是Comment类的一个实例,该类通过$this->render('view', array('model'=>$whatever))传递给视图。这一行将在论坛/view.php文件中以$model的名称生成$whatever。现在,由于您处理的是局部视图,因此必须跟踪它,因为同一个$model变量可能会传递给另一个具有$this->renderPartial('_comment', array('whatever'=>$model))的局部视图,并且现在它将在局部视图中以$whatever的形式访问。