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은 많은 pf 검증 규칙을 즉시 제공합니다.

이 실제로 꽤 잘 문서에 설명되어 있습니다 : 업로드 된 이미지 파일의 유효성을 확인하는 FileValidator

예를 들어 Uploading Files

도 참조 문서 :

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 등이 될 수 있습니다. 파일 유효성 검사기에는 파일의 크기를 제한하는 규칙이 없습니다. 내 파일이 이미지 파일이라고 가정합니다. 치수를 설정하려는 치수와 일치시키고 치수가 설정된 치수보다 큰 경우 오류를 전달합니다. –

+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

이 없습니다. 실수로 대신 이미지 유효성 검사기를 사용할 수 있습니다. –