2

我是 yii 的新手,我正在尝试编辑yii自动为我们创建的_form.php 。_form.php已由create.php视图文件 部分呈现,<?php $this->renderPartial('_form', array('model'=>$model)); ?>
现在在_form.php中使用以下代码

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

我希望仅当此文件由create.php而不是由update.php文件呈现时才显示此行。我可以使用IF条件执行此操作,但我不知道如何检查哪个文件呈现了此表单。 所以我的问题是

how can i check which action has been called or which file is rendering the _form.php???
4

3 回答 3

6

这很简单:

<?php if ($this->action->id == "update") ?>
于 2013-10-11T12:33:27.213 回答
4

您真的不想将局部视图与其所有者的名称结合起来。您可能想要的是仅在模型是新记录时才显示评论区。你可以这样做:

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

请注意,这不会阻止某人制作包含comment正在更新的模型值的 HTTP 请求;它只会隐藏控件。如果您想在服务器上强制执行此操作,您需要comment根据模型的场景放置适当的验证规则。

于 2013-10-11T12:34:20.453 回答
1

您的局部视图不应该真正关心它是从哪里渲染的。如果您的局部视图需要其他信息(作为决策依据),请将其作为参数传递。

$this->renderPartial('_form', array('model'=>$model, 'myparam'=>'blah'));

并在您的部分视图中使用

$myparam...
于 2013-10-11T12:36:33.567 回答