0

ガイドに従って、2 つのモデル (User,UserInfo) を使用して登録フォームを作成しましたが、登録フォームを表示すると、警告 (include(data.php) [function.include]: failed to open stream: No such file or directory) が表示されます。ポップアップが表示され、この警告の原因が本当にわかりません。これが私のコードです:

1. Register action:

 public function actionRegister(){

           $user=new User;
           $user_info=new UserInfo;

            if(isset($_POST['User'],$_POST['UserInfo'])){


             $user->attributes=$_POST['User'];
             $user_info->attributes=$_POST['UserInfo'];


              $valid=$user->validate();

              $valid=$user_info->validate() && $valid;

               if($valid){

                   $user->save(false);
                   $user_info->save(false);

                   $this->redirect(array('index'));


               }


           }

         $this->render('register', array('user'=>$user,'user_info'=>$user_info));

        }





    2. Register view:



         <?php $form=$this->beginWidget('CActiveForm', array(

            'action'=>$this->createUrl('Site/Register'), 

        'enableClientValidation'=>true,

        'enableAjaxValidation'=>false,

        'clientOptions'=>array(
            'validateOnSubmit'=>true,
        ),


           'htmlOptions'=>array('enctype'=>'multipart/form-data')
    )); ?>



        <p class="note">Fields with <span class="required">*</span> are required.</p>

        <?php echo $form->errorSummary(array($user,$user_info)); ?>

        <div class="row">
            <?php echo $form->labelEx($user,'username'); ?>
            <?php echo $form->textField($user,'username',array('size'=>60,'maxlength'=>300)); ?>
            <?php echo $form->error($user,'username'); ?>
        </div>




        3.PHP Warning: 


        include(data.php) [<a href='function.include'>function.include</a>]: failed
        to open stream: No such file or directory
        (C:\wamp\www\Yii-new\framework\YiiBase.php:427)
        Stack trace:
        #0 C:\wamp\www\Yii-new\framework\validators\CValidator.php(186): import()
        #1 C:\wamp\www\Yii-new\framework\base\CModel.php(287): createValidator()
        #2 C:\wamp\www\Yii-new\framework\base\CModel.php(260):
        UserInfo->createValidators()
        #3 C:\wamp\www\Yii-new\framework\web\widgets\CActiveForm.php(506):
        UserInfo->getValidators()
        #4 C:\wamp\www\Yii-new\project2\protected\views\site\register.php(50):
        CActiveForm->error()
        #5 C:\wamp\www\Yii-new\framework\web\CBaseController.php(126): require()
        #6 C:\wamp\www\Yii-new\framework\web\CBaseController.php(95):
        SiteController->renderInternal()
        #7 C:\wamp\www\Yii-new\framework\web\CController.php(869):
        SiteController->renderFile()
        #8 C:\wamp\www\Yii-new\framework\web\CController.php(782):
        SiteController->renderPartial()
        #9
        C:\wamp\www\Yii-new\project2\protected\controllers\SiteController.php(109):
        SiteController->render()
        #10 C:\wamp\www\Yii-new\framework\web\actions\CInlineAction.php(49):
        SiteController->actionRegister()
        #11 C:\wamp\www\Yii-new\framework\web\CController.php(308):
        CInlineAction->runWithParams()
        #12 C:\wamp\www\Yii-new\framework\web\CController.php(286):
        SiteController->runAction()
        #13 C:\wamp\www\Yii-new\framework\web\CController.php(265):
        SiteController->runActionWithFilters()
        #14 C:\wamp\www\Yii-new\framework\web\CWebApplication.php(282):
        SiteController->run()
        #15 C:\wamp\www\Yii-new\framework\web\CWebApplication.php(141):
        CWebApplication->runController()
        #16 C:\wamp\www\Yii-new\framework\base\CApplication.php(180):
        CWebApplication->processRequest()
        #17 C:\wamp\www\Yii-new\project2\index.php(13): CWebApplication->run()
        REQUEST_URI=/Yii-new/project2/site/register
        in C:\wamp\www\Yii-new\project2\protected\views\site\register.php (50)
        in C:\wamp\www\Yii-new\project2\protected\controllers\SiteController.php
        (109)
        in C:\wamp\www\Yii-new\project2\index.php (13)

          [1]: http://www.yiiframework.com/wiki/19/how-to-use-a-single-form-to-collect-data-for-two-or-more-models/
4

3 に答える 3

0

User または UserInfo、あるいはその両方のモデルを作成していません。そこで、protected/models フォルダを確認してください。利用可能な User.php と UserInfo.php があります。

于 2013-11-04T20:22:16.310 に答える
0

問題は UserInfo モデルに関するものでした。UserInfo (モデル、コントローラー、ビュー) を削除し、gii を使用して再度作成したところ、正常に動作しています。

于 2013-11-05T07:48:02.113 に答える
0

これが正しい方法です。

より多くのデータが必要で、モデルを混在させる必要がある場合は、1 つのモデルをプライマリとして選択します。

そのモデル内で、いくつかの変数を宣言します。

ここで、モデル クラスの新しいインスタンスを初期化すると、デフォルトの属性と、新しく追加された変数がそこに表示されます。

新しい変数については、新しいモデル インスタンスを使用して初期化します。

例えば:

あなたはクラス A に属しており、後で使用するためにクラス B および C のデータを保存する必要があります。

A クラスとすべての属性を初期化します。

あなたも使用extended_var1 = new Model();し、extended_var2 = new Model2();

このデータをフォームに渡します。

標準の yii 形式として、標準変数をいつものように扱います。拡張変数が来るとき、それらはオブジェクトまたは配列ですが、そこにあることに注意してください。

この例では、あなたがいるUrlController

public function actionUpdate($id, $type = 'update') {
    $model = $this->loadModel($id);

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if (isset($_POST['Url'])) {
        $model->attributes = $_POST['Url'];
        $model->website = $_POST['Website'];
        if ($model->save())
            if ($type == 'update')
                $this->redirect(array('view', 'id' => $model->id));
            else
                $this->redirect(array('/admin/url/approvePublicLink'));
    }

    $model_website = Website::model()->findByAttributes(array('id'=>$model->website_id));

    $this->render('update', array(
        'model' => $model,
        'model_website' => $model_website,
    ));
}

あなたのメインモデルクラスはUrl

Urlモデル内の簡単な例:

class Url extends CActiveRecord {

    public $website = array();

...

    protected function afterSave() {
        $w = null;
        $w = Website::model()->findByAttributes(array('id' => $this->website_id));
        if($w)
        {
        $w->link = $this->website['link'];
        $w->domain = $this->website['domain'];
        $w->description = $this->website['description'];
        $w->save();
        }
        return parent::afterSave();
    }

}

これは私の見解です:

<div class="form">

<?php

$form=$this->beginWidget('CActiveForm', array(
    'id'=>'url-form',
    'enableAjaxValidation'=>false,
));
?>

    <p class="note">Fields with <span class="required">*</span> are required.</p>

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

<div style="position:relative;float:left;">

    <div style="float:left;padding:20px 20px;">

    <h1>URL</h1>

    <div class="row">
        <?php echo $form->labelEx($model,'link'); ?>
        <?php echo $form->textField($model,'link',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'link'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'title'); ?>
        <?php echo $form->textField($model,'title',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'title'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'description'); ?>
        <?php echo $form->textField($model,'description',array('size'=>60,'maxlength'=>255)); ?>
        <?php echo $form->error($model,'description'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'important'); ?>
        <?php echo $form->dropDownList($model,'important',array(0=>'Normal',1=>'Important')); ?>
        <?php echo $form->error($model,'important'); ?>
    </div>

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

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

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

    <div class="row">
        <?php echo $form->labelEx($model,'will_expire'); ?>
        <?php echo $form->dropDownList($model,'will_expire',array(0=>'No',1=>'Yes')); ?>
        <?php echo $form->error($model,'will_expire'); ?>
    </div>

    </div>

    <div style="float:left;padding:20px 20px;">

    <h1>WEBSITE</h1>

    <div class="row">
        <?php echo $form->labelEx($model,'website_id'); ?>
        <?php echo CHtml::link($model->relation_website->domain,$model->relation_website->link,array('class'=>'avia','target'=>'_blank')); ?>
        <?php echo $form->error($model,'website_id'); ?>
    </div>  

    <div class="row">
        <?php echo $form->labelEx($model_website,'link'); ?>
        <?php echo $form->textField($model_website,'link'); ?> ( ex: http://www.linkbook.co/ )
        <?php echo $form->error($model_website,'link'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model_website,'domain'); ?>
        <?php echo $form->textField($model_website,'domain'); ?> ( ex: linkbook.co )
        <?php echo $form->error($model_website,'domain'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model_website,'description'); ?>
        <?php echo $form->textField($model_website,'description'); ?>
        <?php echo $form->error($model_website,'description'); ?>
    </div>

    </div>

    </div>

    <div style="clear:both;"></div>

    <div class="row">
        <?php echo $form->labelEx($model,'status'); ?>
        <?php echo $form->dropDownList($model,'status',array(-1=>'Banned',0=>'Normal',1=>'Active')); ?>
        <?php echo $form->error($model,'status'); ?>
    </div>  

    <div class="row buttons">
        <?php echo CHtml::submitButton('Save'); ?>
    </div>

<?php $this->endWidget(); ?>

</div><!-- form -->
于 2013-11-05T07:50:21.470 に答える