Warnung: failed to open stream: Keine solche Datei oder das Verzeichnis - Wenn das Rendern Anmeldeformular mit zwei Modellen
Folgte ich der Anleitung, um ein Registrierungsformular mit zwei Modellen (Benutzer,UserInfo), aber wenn ich das Anmeldeformular eine Warnung (include(data.php) [function.include]: failed to open stream: Keine solche Datei oder Verzeichnis), pop-up, und ich verstehe wirklich nicht, was diese Warnung verursacht. Hier ist mein code:
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/
- Bitte ich brauche eine Lösung, ich habe versucht, alles, was ich weiß und es funktioniert nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie nicht erstellen Sie das Modell für entweder Benutzer oder die UserInfo oder beides. Also, schauen Sie bitte in protected/models Ordner vorhanden sind User.php und UserInfo.php.
Das problem war etwas über UserInfo Modell. Ich habe gelöscht UserInfo (model, controller, views) und ich habe es wieder mit gii und jetzt funktioniert ' s einwandfrei.
Dies ist der richtige Weg, es zu tun;
Wenn Sie weitere Daten benötigen, und Sie müssen, mix-Modelle, wählen Sie 1-Modell als primäre;
In diesem Modell, deklarieren einige Variablen;
Nun, wenn Sie init eine neue Instanz der model-Klasse, die Standard-Attribute werden da sein, und auch die neuen zusätzlichen Variablen;
Für die neuen Variablen, init Ihnen über neue model-Instanz;
zB:
sind Sie in der Klasse A und Sie benötigen, um Daten zu speichern, die für die Klasse B und C für die spätere Verwendung;
Sie init der A-Klasse und alle attr;
nutzen Sie auch
extended_var1 = new Model();
undextended_var2 = new Model2();
übergeben Sie diese Daten in einer form;
beschäftigen Sie sich mit den standard-Variablen wie üblich, als standard-yii-Formular, und wenn die erweiterte vars kommen, beachten Sie, dass Sie Objekte oder arrays, aber Sie sind da;
in diesem zB Sie sind in
UrlController
Ihre wichtigsten Modell-Klasse
Url
schnelle zB innerhalb
Url
Modell:dies ist meine Ansicht: