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