Form Request Validation

php artisan make:request StoreBlogPost

On peut coder directement une autorisation et rediriger ou on veut.

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return \Auth::user()->has_role('ADMIN');
    }
    /**
     * Get the response for a forbidden operation.
     */
    public function forbiddenResponse()
    {
        return redirect('/')->with('flash_error',"Seul ADMIN peut...");
    }

Pour personnaliser le format du retour d’erreur

use Illuminate\Contracts\Validation\Validator;
 
//
 
    protected function formatErrors(Validator $validator)
    {
        return $validator->errors()->all();
    }

Pour forcer la réponse en json si on a été authentifié via un token

    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);
    }

Des rules plus complexe

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 ),
            ],
        ];
    }

Validation custom à placer dans app/Providers/AppServiceProvider@boot

// 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");