2013-05-14 2 views
3

У меня есть поле файла точно так, как this ссылка сказала в моем проекте, я поставил именно его код и изменить каждую вещь выглядит это, но когда я хочу это значение с помощью этого кода:Yii поле файла пусто

$uploadedFile = CUploadedFile::getInstanceByName($model,'image'); 

изображение пусто, и я получаю эту ошибку:

Illegal типа смещения в Исеть или пустой

Я видел, что Yii добавил два поля для файла в форме, а первый скрыт и пуст почему?

И я предполагаю, что Yii получил это как основное изображение, и поэтому он всегда пуст. Как я могу получить значение поля файла.

  • Единственным отличием является его использование CActiveRecord но я использую CFormModel beacuse я не имею базу данных в этом проекте.

  • Я могу получить доступ ко всем полям по $ model-> fieldname, но это поле пусто!

Отредактировано:

Я нахожу this учебник, но я не могу использовать его, потому что моя форма в контроллерах, просмотреть файл и получить много переменных из контроллера и это учебники форма кажется чистым:

$form = new CForm('application.views.fileUpload.uploadForm', $model); 

Мое мнение:

<?php $form=$this->beginWidget('CActiveForm', array(
          'id'=>'contacts-form', 
          'enableAjaxValidation' => false, 
          'htmlOptions' => array('enctype' => 'multipart/form-data'), 
         )); ?> 

          <div class="fieldtext"> 
           <div class="labelbox"> 
            <?php echo $form->labelEx($model, Yii::t($this->language,'dialogboxname').":"); ?> 
           </div> 
           <?php echo $form->textField($model,'name',array('value'=>'aaa','size'=>10,'maxlength'=>50,'class'=>'inputbox')); ?> 
          </div> 

          <div class="fieldtext"> 
           <div class="labelbox"> 
            <?php echo $form->labelEx($model,Yii::t($this->language,'dialogboxemail').":"); ?> 
           </div> 
           <?php echo $form->textField($model,'email',array('value'=>'[email protected]','size'=>17,'maxlength'=>50,'class'=>'inputbox')); ?> 
          </div> 

          <div class="fieldtext subjectbox"> 
           <div class="labelbox"> 
            <?php echo $form->labelEx($model,Yii::t($this->language,'dialogboxsubject').":"); ?> 
           </div> 
           <?php echo $form->textField($model,'subject',array('value'=>'aaa','size'=>36,'maxlength'=>50,'class'=>'inputbox')); ?> 
          </div> 

          <div class="fieldtext bodybox"> 
           <div class="labelbox"> 
            <?php echo $form->labelEx($model,Yii::t($this->language,'dialogboxbody').":"); ?> 
           </div> 
           <?php echo $form->textArea($model,'body',array('value'=>'aaa','rows'=>6, 'cols'=>35,'class'=>'inputbox')); ?> 
          </div> 

          <div class="fieldtext bodybox"> 

            <?php echo $form->labelEx($model,'image'); ?> 

            <?php echo $form->fileField($model, 'image'); ?> 
          </div> 

          <?php if(CCaptcha::checkRequirements()): ?> 
          <div class="captchabox fieldtext"> 

           <div> 
           <?php echo $form->labelEx($model,Yii::t($this->language,'dialogboxconfirmcode').":"); ?> 
           <?php $this->widget('CCaptcha',array(
             'showRefreshButton' => false, 
             'clickableImage' => true, 

            )); ?> 
             <?php echo $form->textField($model,'verifyCode',array('size'=>5,'maxlength'=>5)); ?> 

           </div> 

          </div> 
          <?php endif; ?> 
          <div class="contactbuttom"> 
           <div class="submitcontactform buttomsize"> 
            <?php echo CHtml::submitButton(Yii::t($this->language,'dialogboxsendbuttomn')); ?> 
           </div> 
          </div> 
         <?php $this->endWidget(); ?> 

My Model:

<?php 
class ContactForm extends CFormModel { 
    public $name; 
    public $email; 
    public $subject; 
    public $body; 
    public $image; 
    public $verifyCode; 

    /** 
    * Declares the validation rules. 
    */ 
    public function rules() 
    { 
     return array(
      // name, email, subject and body are required 
      array('name, email, subject, body', 'required', 
        ), 
      // email has to be a valid email address 
      array('email', 'email'), 

      array('image', 'file'), 
    } 

    public function attributeLabels() 
    { 
     return array(
      'verifyCode'=>'Verification Code', 
     ); 
    } 

} 

Мой контроллер:

... 
$this->model= new ContactForm; 
$model = $this->model; 

    if(isset($_POST['ContactForm'])) 
    { 
     $model->attributes=$_POST['ContactForm']; 

     if($model->validate()) 
     { 
      $name = $model->name; 
      $email = $model->email; 
      $subject = $model->subject; 
      $body = $model->body; 

      $uploadedFile = CUploadedFile::getInstanceByName($model,'image'); 

.... 

Забавно это проверить это правило, но сказал он пуст.

+0

Пожалуйста, поделитесь своим видом кода? –

+0

Я добавляю другое поле в мое мнение, как имя и адрес электронной почты, все как этот учебник. – Golix

+0

Поделитесь всем своим кодом, и мы сможем помочь. – ShaunUK

ответ

1

Ваш код:

$uploadedFile = CUploadedFile::getInstanceByName($model,'image'); 

должен быть заменен следующим образом:

$uploadedFile = CUploadedFile::getInstance($model,'image'); 

CUploadedFile::getInstanceByName занимает одну paramerter, а не два https://github.com/yiisoft/yii/blob/master/framework/web/CUploadedFile.php#L81

Это требует имя файла-входа. Так, назовем его так:

CUploadedFile::getInstanceByName('ContactForm[image]'); //if 'ContactForm[image]' is input name 

На самом деле, CUploadedFile::getInstance Кальес его. Но он также решает имя самого ввода https://github.com/yiisoft/yii/blob/master/framework/web/CUploadedFile.php#L57

Итак, я считаю, CUploadedFile::getInstance лучше подходит.

PS: Не уверен, почему вы используете CUploadedFile::getInstanceByName даже если учебник вы refered к использует CUploadedFile::getInstance в контроллере.

Будьте внимательны :)

0

Это мой ответ:

 public function actionCreate() 
    { 
     $model = new Answer(); 
     var_dump(Yii::$app->request->post());`enter code here` 
     if ($model->load(Yii::$app->request->post()) && $model->validate()) { 
      $model->answer_by= \Yii::$app->user->getId(); 
      $name = $model->answer_attachment; 
      var_dump($name); 
      $model->answer_attachment = UploadedFile::getInstanceByName('btn.jpg'); 
      var_dump($model->answer_attachment); 
      $time=time(); 
      if(!empty($model->answer_attachment)){ 
       $model->answer_attachment->saveAs('images/answer/'.$time.'.'.$model->answer_attachment->extension); 
       $model->answer_attachment='images/answer/'.$time.'.'.$model->answer_attachment->extension; 
      } 
      $model->answer_timestamp=$time; 
      //$model->save(); 
      //return $this->redirect(['view', 'id' => $model->answer_id]); 
     } else { 
      return $this->render('create', [ 
       'model' => $model, 
      ]); 
     } 
    } 
Смежные вопросы