Outils pour utilisateurs

Outils du site


devweb:laravel:validator:request (lu 13982 fois)

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
devweb:laravel:validator:request [09-05-2017 23:29]
edmc73 créée
devweb:laravel:validator:request [21-08-2017 23:45] (Version actuelle)
edmc73
Ligne 27: Ligne 27:
 Pour personnaliser le format du retour d'erreur Pour personnaliser le format du retour d'erreur
 <code php> <code php>
 +use Illuminate\Contracts\Validation\Validator;
 +
 +//
 +
     protected function formatErrors(Validator $validator)     protected function formatErrors(Validator $validator)
     {     {
         return $validator->errors()->all();         return $validator->errors()->all();
     }     }
 +
 +</code>
 +
 +Pour forcer la réponse en json si on a été authentifié via un token
 +<code php>
 +    public function response(array $errors)
 +    {
 +        if (Auth::guard('api')->check()) {
 +            return response()->json($errors, 422);
 +        }
 +        return $this->redirector->to($this->getRedirectUrl())
 +                                        ->withInput($this->except($this->dontFlash))
 +                                        ->withErrors($errors, $this->errorBag);
 +    }
 +
 +</code>
 +
 +Des rules plus complexe
 +
 +<code php>
 +use Illuminate\Validation\Rule;
 +
 +//
 +    public function rules()
 +    {
 +        $list_ids=List::whereIn('user_id',Auth::id())->pluck('id')->toArray();
 +        return [
 +            "p.*" => [
 +                "required",
 +                Rule::in( $list_ids ),
 +            ],
 +        ];
 +    }
 +
 +
 +</code>
 +
 +Validation custom à placer dans **app/Providers/AppServiceProvider@boot**
 +<code php>
 +// Lorsque vous passez un array, pour s'assurer que la somme fait 100
 +
 +        Validator::extend('sumEqual100', function($attribute, $value, $parameters, $validator){
 +            if(collect($value)->sum()==100)
 +                return true;
 +            return false;
 +        }, "The sum of the percentages of each message must be 100");
 +
 +// ici on a un array en entrée avec des ids dans la clé du array
 +// on veut comparer cette liste à une table et retourner en erreur les ids qui n'existe pas dans la table
 +        Validator::extend('his_messages_in_keys', function($attribute, $value, $parameters, $validator){
 +
 +            $ids=array_keys($value);
 +            $message_ids = \App\Models\Message::where('user_id',auth()->user()->tenant_id)
 +                ->whereIn('id',$ids)->pluck('id')->toArray();
 +            $diff=array_diff($ids,$message_ids);
 +            if(count($diff)==0)
 +                return true;
 +
 +            $validator->addReplacer('his_messages_in_keys', function($message, $attribute, $rule, $parameters) use ($diff) {
 +                return str_replace(':ids', implode(',', $diff), $message);
 +            });
 +            return false;
 +
 +        }, "Following message ids doesn't exists or doesn't belongs to you : :ids");
 +
  
 </code> </code>
devweb/laravel/validator/request.1494365384.txt.gz · Dernière modification: 09-05-2017 23:29 de edmc73