Laravelでカスタム検証を追加するときに、クラスClosureのオブジェクトを文字列に変換できませんでした

Patweb

Laravelでいくつかのカスタム検証ルールに取り組んでいます。2つの日付のカスタム検証を追加していますが、戻り日は出発日から6日後でなければなりません。カスタム検証を追加すると、次のエラーが発生し続けます。

(1/1)ValidationRuleParser.php行107で、クラスClosureのErrorExceptionオブジェクトを文字列に変換できませんでした

手伝ってください

コントローラ

public function validatePlanEntries(Request $request)
{
    $validation = $this->validate($request, [
        'departure_date' => 'required|date|after:now',

        //Must be 6 days after departure date
        'return_date' => ['required', 'date', function ($attribute, $value, $fail) {
            if (strtotime($value) < strtotime(request('departure_date')) + 518400) {
                $fail('Departure date invalid');
            }
        }],
    ]);
}
外典

コメントで述べたように、コールバック検証ルールをサポートしないバージョンのLaravelを使用していますが、残念ながら、これを行う唯一の方法は、新しいルールでバリデーターを拡張することです。

これをサービスプロバイダーの1つに追加します(例AppServiceProvider

public function boot() {
     //Other boot things

    $validator = app()->make(\Illuminate\Validation\Factory::class);
    $validator->extend('return_date_after', function ($attribute, $value, $parameters, $validator) {
          $otherAttribute = array_get($parameters, 0);
          $days = array_get($parameters, 1, 6); //default 6 days
          $otherValue = array_get($validator->getData(), $otherAttribute);
          if (strtotime($value) < strtotime($otherValue) + $days*24*60*60) {
            return false;
          }
          return true;
    });

    $validator->replacer('return_date_after', function ($message, $attribute, $rule, $parameters) {
          return 'Your return date must be '.array_get($parameters,1,6).' days after your '.array_get($parameters, 0);
   });
}

次に、このカスタムルールを次のように使用できます。

  $validation = $this->validate($request, [
        'departure_date' => 'required|date|after:now',

        //Must be 6 days after departure date
        'return_date' => ['required', 'date', 'return_date_after:departure_date,6' ]
    ]);

なお、$messageお使いの代用品では、から来ているresources/lang/<locale>/validation.phpので、あなたは、このような「return_date_after」としてそこにエントリを追加し、代用の代わりに、静的なテキストを返すには、それをmanipualteすることができます。例えば:

"return_date_after" => "Your :attribute must be :days days after your :other_attribute"

そして、あなたの代替品は次のようになります:

 $validator->replacer('return_date_after', function ($message, $attribute, $rule, $parameters) {
      return str_replace([ ":days", ":other_attribute" ], 
          [ array_get($parameters, 1, 6), array_get($parameters,0) ], 
          $message);        
});

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

クラスClosureのphpオブジェクトを文字列に変換できませんでした

分類Dev

クラスClosureのYii2オブジェクトを文字列に変換できませんでした

分類Dev

クラスstdClassのオブジェクトをLaravelで文字列に変換できませんでしたか?

分類Dev

「回復可能な致命的なエラー:クラスClosureのオブジェクトを文字列に変換できませんでした...」を修正する方法

分類Dev

クラスstdClassのオブジェクトを文字列に変換できませんでした-laravel

分類Dev

クラスstdClassのオブジェクトを文字列Laravel5に変換できませんでした

分類Dev

Webサービスに接続するときに、クラスstdclassのオブジェクトをphpで文字列に変換できませんでした

分類Dev

Webサービスに接続するときに、クラスstdclassのオブジェクトをphpで文字列に変換できませんでした

分類Dev

Laravel-クラスstdClassのオブジェクトを解決する方法を文字列エラーに変換できませんでした

分類Dev

エラー:クラスmysqliのオブジェクトを文字列に変換できませんでした

分類Dev

クラスセットのオブジェクトを文字列に変換できませんでした

分類Dev

クラスstdClassのオブジェクトの問題を文字列に変換できませんでした

分類Dev

クラスDateIntervalのphpオブジェクトを文字列に変換できませんでした

分類Dev

クラスwpdbのオブジェクトを文字列に変換できませんでした

分類Dev

PHP-クラスのオブジェクトを文字列に変換できませんでした

分類Dev

Login_Modelクラスのオブジェクトを文字列に変換できませんでした

分類Dev

Symfony4-クラスのオブジェクトを文字列に変換できませんでした

分類Dev

クラスSymfony \ Component \ HttpFoundation \ ParameterBagのオブジェクトを文字列に変換できませんでした

分類Dev

クラスstdClassのオブジェクトを文字列に変換できませんでしたCodeIgniter

分類Dev

クラスOCI-Lobのオブジェクトを文字列に変換できませんでした

分類Dev

クラスApp \ Http \ Controllers \ ConfigClassのオブジェクトを文字列に変換できませんでした

分類Dev

クラスDateTimeのオブジェクトを文字列に変換できませんでした-Symfony / PHP

分類Dev

EasyAdmin3クラスDateTimeのオブジェクトを文字列に変換できませんでした

分類Dev

Symfony2:クラスDateTimeのオブジェクトを文字列に変換できませんでした

分類Dev

クラスstdClassのPHPオブジェクトを文字列に変換できませんでした

分類Dev

クラスDoctrine \ ORM \ PersistentCollectionのオブジェクトを文字列に変換できませんでした

分類Dev

クラスmysqli_resultのオブジェクトを文字列に変換できませんでした

分類Dev

クラスZipArchiveのオブジェクトを文字列に変換できませんでした

分類Dev

クラスstdClassのオブジェクトを文字列に変換できませんでした

Related 関連記事

  1. 1

    クラスClosureのphpオブジェクトを文字列に変換できませんでした

  2. 2

    クラスClosureのYii2オブジェクトを文字列に変換できませんでした

  3. 3

    クラスstdClassのオブジェクトをLaravelで文字列に変換できませんでしたか?

  4. 4

    「回復可能な致命的なエラー:クラスClosureのオブジェクトを文字列に変換できませんでした...」を修正する方法

  5. 5

    クラスstdClassのオブジェクトを文字列に変換できませんでした-laravel

  6. 6

    クラスstdClassのオブジェクトを文字列Laravel5に変換できませんでした

  7. 7

    Webサービスに接続するときに、クラスstdclassのオブジェクトをphpで文字列に変換できませんでした

  8. 8

    Webサービスに接続するときに、クラスstdclassのオブジェクトをphpで文字列に変換できませんでした

  9. 9

    Laravel-クラスstdClassのオブジェクトを解決する方法を文字列エラーに変換できませんでした

  10. 10

    エラー:クラスmysqliのオブジェクトを文字列に変換できませんでした

  11. 11

    クラスセットのオブジェクトを文字列に変換できませんでした

  12. 12

    クラスstdClassのオブジェクトの問題を文字列に変換できませんでした

  13. 13

    クラスDateIntervalのphpオブジェクトを文字列に変換できませんでした

  14. 14

    クラスwpdbのオブジェクトを文字列に変換できませんでした

  15. 15

    PHP-クラスのオブジェクトを文字列に変換できませんでした

  16. 16

    Login_Modelクラスのオブジェクトを文字列に変換できませんでした

  17. 17

    Symfony4-クラスのオブジェクトを文字列に変換できませんでした

  18. 18

    クラスSymfony \ Component \ HttpFoundation \ ParameterBagのオブジェクトを文字列に変換できませんでした

  19. 19

    クラスstdClassのオブジェクトを文字列に変換できませんでしたCodeIgniter

  20. 20

    クラスOCI-Lobのオブジェクトを文字列に変換できませんでした

  21. 21

    クラスApp \ Http \ Controllers \ ConfigClassのオブジェクトを文字列に変換できませんでした

  22. 22

    クラスDateTimeのオブジェクトを文字列に変換できませんでした-Symfony / PHP

  23. 23

    EasyAdmin3クラスDateTimeのオブジェクトを文字列に変換できませんでした

  24. 24

    Symfony2:クラスDateTimeのオブジェクトを文字列に変換できませんでした

  25. 25

    クラスstdClassのPHPオブジェクトを文字列に変換できませんでした

  26. 26

    クラスDoctrine \ ORM \ PersistentCollectionのオブジェクトを文字列に変換できませんでした

  27. 27

    クラスmysqli_resultのオブジェクトを文字列に変換できませんでした

  28. 28

    クラスZipArchiveのオブジェクトを文字列に変換できませんでした

  29. 29

    クラスstdClassのオブジェクトを文字列に変換できませんでした

ホットタグ

アーカイブ