0

私はYiiのかなり新しいユーザーです.使用してから2か月未満です..ロード時に2つのラジオボタンしか表示されない登録フォームを作成しようとしています(選択肢1は人、選択肢2は組織です) )、ユーザーが選択肢を選択すると、ajax を使用して、選択に対応するフィールドを動的に表示したいと考えています。

注: 私は yii-user 拡張機能を使用しています。同じテーブルを使用して、Person と Organization の両方のユーザーを格納するつもりです。これらは 3 つの属性のみが異なるためです。

私はこの問題で2日間立ち往生しており、解決できません..

これは私のコードのスニペットです: registration.php (view)

<?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>

RegistrationController.php

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

test.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) を選択したときに受信するエラーは次のとおりです。

どんな助けでも大歓迎です!

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.phptest.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 ブロックを 1 つのブロックにまとめました。

于 2012-11-15T01:46:39.760 に答える