Yii 如何在关联模型上显示验证错误?
在留言簿视图中,我们有:Yii 如何在关联模型上显示验证错误?,yii,Yii,在留言簿视图中,我们有: <?php $form=$this->beginWidget('CActiveForm', array( 'id'=>'hs-guestbook-form', 'enableAjaxValidation'=>false, 'htmlOptions' => array('enctype' => 'multipart/form-data'), )); ?&g
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'hs-guestbook-form',
'enableAjaxValidation'=>false,
'htmlOptions' => array('enctype' => 'multipart/form-data'),
));
?>
<script type="text/javascript">
$(document).ready(function()
{
if($('#localized fieldset').length==1)
{
$.ajax({
success: function(html){
$('#localized').append(html);
$('#localized fieldset:last-child').toggle()
},
type: 'get',
url: '<?php echo $this->createUrl('localized'); ?>',
data:
{
index: 1
},
cache: false,
dataType: 'html'
});
}
else {
$('#localized fieldset:last-child').toggle();
}
});
</script>
... and later down this view...
<div id="localized">
<?php for($i=0; $i<count($local);$i++): ?>
<?php if(isset($local[$i]))
$this->renderPartial('_localized',array('model'=>$local[$i],'index'=>$i));
?>
<?php endfor;?>
</div>
问题很简单:
知道“$form->error”将给出“Undefined variable form”,我们如何在这个局部视图上显示错误?
以下是其他详细信息:
在我们的留言簿控制器上我们称之为这样的新机型:
public function getExtraModelGuestTr()
{
$model = new HsGuestbookTr;
if (isset($_POST['HsGuestbookTr']))
{
$model->attributes = $_POST['HsGuestbookTr'];
}
return $model;
}
public function actionCreate()
{
$this->layout = 'admin';
$model=new HsGuestbook;
$localized[] = $this->getExtraModelGuestTr();
if(isset($_POST['HsGuestbook']))
{
if (($_POST['HsGuestbook']['status']) === '0') {
$model->setScenario('Insert');
} else {
$model->setScenario('Publish');
}
...
然后,在创建时,我们使用它的方式如下:
public function getExtraModelGuestTr()
{
$model = new HsGuestbookTr;
if (isset($_POST['HsGuestbookTr']))
{
$model->attributes = $_POST['HsGuestbookTr'];
}
return $model;
}
public function actionCreate()
{
$this->layout = 'admin';
$model=new HsGuestbook;
$localized[] = $this->getExtraModelGuestTr();
if(isset($_POST['HsGuestbook']))
{
if (($_POST['HsGuestbook']['status']) === '0') {
$model->setScenario('Insert');
} else {
$model->setScenario('Publish');
}
...
在留言簿型号上我们有:
public function rules()
{
return array(
array('name, category', 'required', 'on'=>'Insert'),
array('name, category, image', 'required', 'on'=>'Publish'),
...
您可以将$form->error()交给用户;任何模型的$model变量。
在您的情况下,您必须首先使其可访问,并使它们的名称消除歧义
$model=new HsGuestbook;
$modelTr = new HsGuestbookTr;
$form->error($model,'name');
$form->error($modelTr,'name');
要创建$form变量,需要实例化一个新的CActiveForm类,如以下文档所述:
我在上面显示的getExtraModel方法中这样做了:(我仍然无法在局部视图中获得任何要使用uswd的
$form
,因此我无法显示与这些表单字段相关的错误。哦!您不是创建了表单吗?(这不是自动完成的!)请参阅对我的评论的编辑。我在留言簿表单上调用了CActiveForm。在该表单中,我正在渲染一个部分,通过ajax调用它,而在该部分视图上,我无法渲染任何错误消息。可能是由于ajax调用的缘故?我将在我的问题上添加此剪辑。您只想在控制器操作t中重新初始化$formhat接受ajax调用。正如我之前建议的那样,只需使用$form->error($modelTr,'name');上一次调用的原始$form变量将消失,但您只需创建一个新的CActiveForm对象,它将完成您需要的所有验证。