2016-09-21 39 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

:我的错误是,您可以使用图像验证程序。 –