2017-05-22 17 views
0

私の管理パネルのファイルアップロード用にカスタム検証ロジックを追加しようとしています。ファイルがアップロードされたり変更されたりしなかった場合、私のファイルフィールドはIlluminate\Http\UploadedFileまたはstring|nullのいずれかを返すことがあります。だから、私がやっていることは、私はこのようになりますカスタムルールを作成し、次のとおりです。同じ属性にカスタム条件付き検証ルールを追加します

'image' => [ 
       'required', 
       'admin_file:mimes:jpeg;png,dimensions:min_width=800;min_height=600' 
      ] 

私はその後、私は合格し、すべての引数を解析し、事は、私は自然にそれらのすべては私の場合に適用したいです値はUploadedFileのインスタンスです。私は私のカスタム検証のために以下のコードを使用します。

class AdminFileValidator 
{ 
    public function validate($attribute, $value, $parameters, Validator $validator) 
    { 
     $rules = implode(
      "|", 
      array_map(function($item) { 
       return str_replace(";", ",", $item); 
      }, $parameters) 
     ); 

     $validator->sometimes($attribute, $rules, function() use ($value) { 
      return $value instanceof UploadedFile; 
     }); 

     return true; 
    } 
} 

問題があり、sometimesを経由して属性に追加のルールを追加すると、これらの追加されたルールはバリデータによって処理されていない、そのように動作しません。

これらのルールを検証する方法はありますかはすべて手動で再検証する必要はありませんか?

+0

をそれは正直にあなたがしたいと思う理由も意味がありませんこのためのカスタムバリデータを作成します。 Laravelには、ファイルが正常にアップロードされたかどうかを確認する 'file'ルールが付いています。オプションにするルールもあります。 – Sandeesh

+0

検証が必要なファイルには、さまざまな種類があります。文書、画像、画像+ pdfなどと同じです。そしてmimeルールは 'UploadedFile'インスタンスのみを受け入れ、文字列が渡されると失敗します(すべてが' FormRequest'にラップされているため、合理的に避けられません)。 – Eternal1

+0

文字列の値をスローするのではなく、エラー?私が見ている限り、 'file'、' mimetypes'、 'mimes'というルールは、時には文字列許容量を除いて必要なものとまったく同じです。私はフォームファイルの入力で文字列をどうやって取得するのか分かりません。 – Sandeesh

答えて

0

私が見ているのは、あなたが規則内にsometimesを使用していることです。私の考え方から、カスタムクラスを使わなくてもそれを取り除く必要があります。バリデータオブジェクト使用

:あなたはRequestクラスを使用している場合

$validator = Validator::make($data, [ 
    'image' => 'required', 
]); 

$validator->sometimes('image', 'mimes:jpeg;png,dimensions:min_width=800', function($value) { 
    return $value instanceof UploadedFile; 
}); 

を、あなたは順番に機能getValidatorInstanceをオーバーライドすることができ、条件付きルール適用されます。

protected function getValidatorInstance(){ 
    $validator = parent::getValidatorInstance(); 

    $validator->sometimes('image', 'mimes:jpeg;png,dimensions:min_width=800', function($value) { 
     return $value instanceof UploadedFile; 
    }); 

    return $validator; 
} 
関連する問題