2016-09-21 40 views
0

的形式顯示錯誤消息在yii2項目中,我有我自己的文件結構設置。上傳的任何內容都將保存爲文件類型。我可以使用yii2在臨時文件夾中上傳的文件來獲取文件大小。使用這些尺寸我設定了我自己的寬度和高度並對它們進行比較。如果高度和寬度超過了我所聲明的,它會在窗體中顯示一條錯誤消息。我無法做到這一點。yii2要驗證的尺寸並以

我的活動表格

<div class="company-form"> 

    <?php 
    $form = ActiveForm::begin([ 
     'action'=>['company/logo', 'id'=>$model->company_id], 
     'validateOnSubmit' => true, 
     'options' => 
      ['enctype' => 'multipart/form-data','class' => 'disable-submit-buttons','id'=> 'companyLogoForm'], 
      'fieldConfig' => [ 
       'template' => "<div class=\"row\"> 
       <div class=\"col-xs-6 margin-top-8\">{label}</div>\n<div class=\"col-xs-6 text-right\">{hint}</div> 
       \n<div class=\"col-xs-12 \">{input}</div> 
       </div>",    
      ],           
    ]); ?> 

    <?= $form->errorSummary($model, $options = ['header'=>'','class'=>'pull-left']); ?> 

    <?= $form->field($model, 'company_name')->hiddenInput(['maxlength' => true])->label(false) ?> 

    <?= $form->field($file, 'file')->fileInput([])->label(Yii::t('app', 'Attach Logo'),['class'=> 'margin-top-8']) ?> 

    <div class="form-group"> 
     <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Save') : Yii::t('app', 'Save'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary','data' => ['disabled-text' => 'Please Wait']]) ?> 
    </div> 

    <?php ActiveForm::end(); ?> 

</div> 

我的控制器動作

public function actionLogo($id) 
    { 
     $model = $this->findModel($id); 

     if ($model->load(Yii::$app->request->post()) && $model->validate()) { 

      $file = new File; 
      $file->load(Yii::$app->request->post()); 
       $a = UploadedFile::getInstance($file,'file'); 
       $size = getimagesize($a->tempName); 
       $maxWidth = 500; 
       $maxHeight = 500; 
       if ($size[0] > $maxWidth || $size[1] > $maxHeight) 
        { 
         $model->addError('file', $error = 'Error Message'); 
         if($model->hasErrors()){ 
          return ActiveForm::validate($model); 
         } 

        } 

       $file->file = UploadedFile::getInstance($file,'file'); 
       $file->file_name = $file->file->name; 
       $file->file_user = Yii::$app->user->id; 
       $file->file_type = 1; 

       if($file->save()){ 
        $file->file_path = Files::getFilePath($file->file_id); 
        $validDir = $file->file->createFileDir($file->file_path, $file->file_id); 

        if($validDir){ 
         $file->file->saveAs($file->file_path, false); 
         if($file->save()){ 
          $model->company_file = $file->file_id; 
          $model->save(); 
          return $this->redirect(['index']); 
         } 
       } 
      } 
     } 
    } 

我如何在控制器中添加錯誤消息,並傳遞到顯示我的模式對話框形式。

注意:我的表單顯示在模式框中。

謝謝!

+0

使用自定義驗證函數模型規則中的離子。 –

回答

0

您應該在您的模型中處理文件處理 - 或者甚至更好,爲此創建一個特定UploadForm模型。 在這種情況下,您可以使用文件驗證或自定義驗證程序在模型驗證期間設置錯誤。 內置yii\validators\FileValidator爲您提供了大量開箱即用的驗證規則。

這實際上是相當不錯的文檔中解釋說:Uploading Files

又見文檔FileValidator

例用於驗證上傳的圖片文件:

namespace app\models; 

use yii\base\Model; 
use yii\web\UploadedFile; 

class UploadForm extends Model 
{ 
    /** 
    * @var UploadedFile 
    */ 
    public $imageFile; 

    public function rules() 
    { 
     return [ 
      [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'], 
     ]; 
    } 

    public function upload() 
    { 
     if ($this->validate()) { 
      $this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension); 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 
+0

這裏沒有問題是我有一個文件結構setup..by我自己..當我上傳圖像文件它將被保存爲文件類型。文件結構中的文件可以是任何文件,可以是pdf,jpg等。文件驗證器沒有限制文件尺寸的規則。說我的文件是一個圖像文件我想要獲得的尺寸comapre他們與我設置的尺寸,並通過錯誤,如果維度超過設定的尺寸 –

+0

對不起,我誤以爲錯誤在模型中不可見。最好的方法是在這種情況下創建自己的自定義文件驗證程序,並在您的模型中使用它;你可以基於'FileValidator'並在那裏添加自己的支票 – jlapoutre

0

試試這個驗證規則

['imageFile', 'image', 'minWidth' => 250, 'maxWidth' => 250,'minHeight' => 250, 'maxHeight' => 250, 'extensions' => 'jpg, gif, png', 'maxSize' => 1024 * 1024 * 2], 
+0

這是不可能的,因爲我使用的是fileValidator。 fileValidator沒有修正minWidth和maxHeight屬性 –

+0

:我的錯誤是,您可以使用圖像驗證程序。 –