How to wrire custom validation rule in controller Laravel? -
i have default validation rule in controller laravel:
$validator = validator::make($request->all(), [ 'email' => 'required|email', 'phone' => 'required|numeric', 'code' => 'required|string|min:3|max:4', 'timezone' => 'required|numeric', 'country' => 'required|integer', 'agreement' => 'accepted' ]); i tried this, dont know how transfer parameters inside function:
public function boot() { validator::extend('phone_unique', function($attribute, $value, $parameters) { return substr($value, 0, 3) == '+44'; }); } how can extent validation own rule? example need validate concatination of inputs:
$phone = $request->code.' '.$request->phone after check if $phone exists in database
i want use method:
> $validator->sometimes('phone', 'required|alpha_dash|max:25', function > ($input) { > if ((auth::user()->phone == $input->phone)) { > return false; > > } else { > > $t = user::where("phone", $input->phone)->get(); > return ($t->count() > 0) ? false : false; > > } > }); it not work under conditions (true, false) inside.
i added new validation nickname_unique:
$validator = validator::make($request->all(), [ 'email' => 'required|email', 'code' => 'required|string|min:3|max:4', 'phone' => 'required|phone_unique', 'timezone' => 'required|numeric', 'country' => 'required|integer', 'nickname' => 'required|alpha_dash|max:25', 'agreement' => 'accepted' ], [ 'phone_unique' => 'phone exists!', 'nickname_unique' => 'nickname busy!', ]); it not work, not call validation rule below previos:
validator::extend('nickname_unique', function ($attribute, $value, $parameters, $validator) { dd("here"); });
you can define custom validator inside appserviceprovider this:
<?php namespace app\providers; use illuminate\support\serviceprovider; use illuminate\support\facades\validator; class appserviceprovider extends serviceprovider { /** * bootstrap application services. * * @return void */ public function boot() { validator::extend('phone_unique', function ($attribute, $value, $parameters, $validator) { $inputs = $validator->getdata(); $code = $inputs['code']; $phone = $inputs['phone']; $concatenated_number = $code . ' ' . $phone; $except_id = (!empty($parameters)) ? head($parameters) : null; $query = user::where('phone', $concatenated_number); if(!empty($except_id)) { $query->where('id', '<>', $except); } return $query->->exists(); }); /** * register service provider. * * @return void */ public function register() { // } } you can inputs passed validator, accessing
$validatorproperty -getdata()
you can add parameter rules array after custom validation rule (just after colon) this:
'phone' => 'required|phone_unique:1', pass
idignored while checking entries db
the custom validator closure receives 4 arguments: name of $attribute being validated, $value of attribute, array of $parameters passed rule, , validator instance.
now can call validator this:
$validator = validator::make($request->all(), [ 'email' => 'required|email', 'code' => 'required|string|min:3|max:4', 'phone' => 'required|phone_unique:1', 'timezone' => 'required|numeric', 'country' => 'required|integer', 'agreement' => 'accepted' ], [ 'phone_unique' => 'phone exists!', // <---- pass message custom validator ]); see more custom validation rules.
Comments
Post a Comment