0

我是 Yii 的一个相当新的用户.. 使用它不到 2 个月.. 我正在尝试做一个注册表单,在加载时它只显示 2 个单选按钮(比如选择 1 是个人,选择 2 是组织),当用户选择一个选项时,我想使用 ajax 动态显示与他的选择相对应的字段。

注意:我使用的是 yii-user 扩展,我打算使用同一张表来存储个人和组织用户,因为它们只有 3 个属性不同。

我已经被这个问题困扰了2天,无法解决它..

这是我的代码片段:registration.php(查看)

<?php $this->pageTitle=Yii::app()->name . ' - '.UserModule::t("Registration"); 
$this->breadcrumbs=array( 
        UserModule::t("Registration"), 
); 
?> 

<h1><?php echo UserModule::t("Registration"); ?></h1> 

<?php if(Yii::app()->user->hasFlash('registration')): ?> 
<div class="success"> 
<?php echo Yii::app()->user->getFlash('registration'); ?> 
</div> 
<?php else: ?> 

<div class="form"> 
<?php $form=$this->beginWidget('UActiveForm', array( 
        'id'=>'registration-form', 
        'enableAjaxValidation'=>true, 
        'disableAjaxValidationAttributes'=>array('RegistrationForm_verifyCode'), 
        'clientOptions'=>array( 
                'validateOnSubmit'=>true, 
        ), 
        'htmlOptions' => array('enctype'=>'multipart/form-data'), 
)); ?> 

        <p class="note"><?php echo UserModule::t('Fields with <span class="required">*</span> are required.'); ?></p> 

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

    <div class="row"> 
    <?php echo $form->radioButtonList($model, 'profile_type', array(0=>'Person',1=>'Company'),array('separator'=>'', 'labelOptions'=>array('style'=>'display:inline'), 'onclick' =>CHtml::ajax(array("type"=>"GET", "url"=>array("registration/add"), "data"=>array('test'=>'js:this.value'), "update"=>"#test")))); ?> 

        </div>

注册控制器.php

public function actionAdd() {  
            if(Yii::app()->request->isAjaxRequest){   
                    $this->renderPartial("/user/test",array('model'=>$model),false,true);    
                    Yii::app()->end();               
            } 
    }

测试.php

<?php 
$val = $_GET['test']; 

if($val == 1){ 
  echo "yes"; 
//nothing added yet 
} 
else{ 
        echo "no"; 
        ?> 
  <div class="row">  
    <?php echo $form->labelEx($model,'username'); ?> 
        <?php echo $form->textField($model,'username'); ?> 
        <?php echo $form->error($model,'username'); ?> 
  </div> 
<div class="row"> 
        <?php echo $form->labelEx($model,'email'); ?> 
        <?php echo $form->textField($model,'email'); ?> 
        <?php echo $form->error($model,'email'); ?> 
        </div> 

        <div class="row"> 
        <?php echo $form->labelEx($model,'password'); ?> 
        <?php echo $form->passwordField($model,'password'); ?> 
        <?php echo $form->error($model,'password'); ?> 
        <p class="hint"> 
        <?php echo UserModule::t("Minimal password length 4 symbols."); ?> 
        </p> 
        </div> 

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

} 
?>

当我选择 Person (choice 0) 时收到的错误如下: 致命错误:在 test.php 中的非对象上调用成员函数 labelEx()

任何帮助深表感谢!

4

1 回答 1

1

确凿的证据就是错误Fatal error: Call to a member function labelEx() on a non-object in test.php——它告诉你这labelEx()不是一种方法。查看您的view.php,您可以看到labelEx()被称为方法的$form

问题是当视图test.php被渲染时,它不知道$form你在registration.php. test.php只知道你传递给它的参数(在这种情况下,只有$model)。

而不是使用$form->method(),只需CActiveForm::method在您的视图中使用,例如:

  <div class="row">  
    <?php 
        echo CActiveForm::labelEx($model,'username')
        echo CActiveForm::textField($model,'username');
        echo CActiveForm::error($model,'username');
    ?>
  </div> 

我还将您连续的 PHP 块组合成一个块,以便于阅读/解析/等。

于 2012-11-15T01:46:39.760 回答