2

カスタム検証ルールを登録しようとしていますが、機能していないようです。2 つのフィールドのいずれかに入力する必要があります。1 つは URL(リンク) フィールドで、もう 1 つはファイル入力 (file_upload) フィールドです。これが私のカスタム検証です:

Validator::register('file_check', function($attribute, $value, $parameters) {
    if (!trim($value) == "" || array_get(Input::file($parameters[0]), 'tmp_name')) {
        return true;
    }
    return false;
});

$messages = array(
    'file_check' => 'Please upload a file or provide a link to files.',
);

$rules = array(
    'link' => 'url|file_check:file_upload',
    'file_upload' => 'mimes:jpg,jpeg,gif,png,psd,ai,bmp,xls,xlsx,doc,docx,zip,rar,7z,txt,pdf'

);
$validation = Validator::make(Input::all(), $rules, $messages);

if ($validation - > fails()) {
    return Redirect::to('page') - > with_errors($validation - > errors) - > with_input();
}

助けが必要 :)

編集済み

また、検証ルールは「PSD」ファイルを受け入れる必要があることに気付きましたが、PSD ファイルをアップロードしようとすると、「無効なファイル タイプ」というエラーでリダイレクトされます。

4

3 に答える 3

6

私はパーティーに遅れているかもしれませんが、フィールドが入力に存在しない場合でも呼び出される暗黙のルールを作成する必要がある場合に備えて、誰かがそれを便利だと思うかもしれません ( required,required_if....など) 使用

Validator::extendImplicit( 'validator_name', function($attribute, $value, $parameters)
{

});

これをチェックしてください

于 2015-02-25T19:24:31.823 に答える
5

私はちょうどこれに苦労していました!いくつかの特定のルールが適用される場合を除いて、Laravel は Validator を介して空のフィールドをまったく渡しません。そのため、2 つのフィールドのうち少なくとも 1 つが表示されない可能性が高いため、カスタムのどちらか一方のルールは機能しません。

これは、新しいルールを登録するアプローチから、バリデータークラスを拡張する別のアプローチに移行することで回避できます。新しいクラスは、Laravel がフィールドを渡すべきルールのホワイトリストを指定する「implicit」と呼ばれるメソッド (標準の Validator クラスの 215 行目にオリジナルを見つけることができます) を含む、標準の Validator のすべてのメソッドを継承します。それらが空の場合。新しいルールをそのリストに追加すると、準備完了です。

于 2013-03-28T19:47:17.350 に答える
0

ジェイソンの言うとおりですが、混乱を招く可能性があることが 1 つあります。

Laravel の「新しいルールを登録する」アプローチは、構文「Validator:: extend (...」を使用します。他の場所で説明されているように、これは特別な状況でカスタマイズしたい場合に便利です。ただし、再利用可能なルールをいくつか追加する場合その場合、条件付きで何かを必要とするルールがある場合は、ルールを追加する新しい配列で既存の ImplicitRules 配列をオーバーライドする必要があります。

追加した最初のルールが条件付きで必要でない場合は、それを釘付けにしたと思うでしょう。その後、新しい「RequireWhenBlaBla...」ルールが非表示になっている理由を理解するのに何時間も費やすことになります。

于 2014-07-22T00:02:14.390 に答える