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