国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

如何優雅的使用 laravel 的 validator驗證方法

2024-05-05 00:05:48
字體:
來源:轉載
供稿:網友

web 開發過程中經常會需要進行參數驗證,laravel 中我們常用 validator 或者 request 這兩種方法來進行驗證,但是這兩種驗證都不是很方便進行自定義提示信息,自定義驗證規則,所以下面來介紹一種很方便的用法:

新建抽象類

<?phpnamespace App/Http/Validators;use Validator;abstract class AbstractValidator{ /**  * Validator  *  * @var /Illuminate/Validation/Factory  */ protected $validator; /**  * Validation data key => value array  *  * @var array  */ protected $data = array(); /**  * Validation errors  *  * @var array  */ protected $errors = array(); /**  * Validation rules  *  * @var array  */ protected $rules = array(); /**  * Validation messages  *  * @var array  */ protected $messages = array(); /**  * Validation codes  *  * @var array  */ protected $codes = array(); public function __construct(array $data) {  $this->data = $data;  $this->before();  $this->validator = Validator::make($this->data, $this->rules, $this->messages);  $this->after(); } /**  * Set data to validate  *  * @return validator  */ public function getValidator() {  return $this->validator; } /**  * Set data to validate  *  * @return $this  */ public function with(array $data) {  $this->data = $data;  $this->before();  $this->validator = $this->validator->make($this->data, $this->rules, $this->messages);  $this->after();  return $this; } /**  * Validation passes or fails  *  * @return boolean  */ public function passes() {  if ($this->validator->fails()) {   $this->errors = $this->validator->messages();   return false;  }  return true; } /**  * Return errors, if any  *  * @return array  */ public function errors() {  return $this->errors; } /**  * Return errors codes, if any  *  * @return array  */ public function getCodes() {  return $this->codes; } /**  * getRules  *  * @return array  */ public function getRules() {  return $this->rules; } /**  * getData  *  * @return array  */ public function getData() {  return $this->data; } /**  * getErrors  *  * @return array  */ public function getErrors() {  return $this->errors; } /**  * getMessages  *  * @return array  */ public function getMessages() {  return $this->messages; } /**  * setRule  *  * @param string $key  * @param string $value  *  * @return $this  */ public function setRule($key, $value) {  $this->rules[$key] = $value;  return $this; } /**  * emptyRules  *  * @return $this  */ public function emptyRules() {  $this->rules = array();  return $this; } /**  * sometimes  *  * @param string  $attribute  * @param string|array $rules  * @param callable  $callback  *  * @return $this  */ public function sometimes($attribute, $rules, callable $callback) {  $this->validator->sometimes($attribute, $rules, $callback);  return $this; } /**  * resolver  *  * @param Closure $resolver  *  * @return $this  */ public function resolver(Closure $resolver) {  Validator::resolver($resolver);  return $this; } /**  * replacer  *  * @param Closure $resolver  *  * @return $this  */ public function replacer($replace, Closure $resolver) {  Validator::replacer($replace, $resolver);  return $this; } /**  * extendImplicit  *  * @param Closure $resolver  *  * @return $this  */ public function extendImplicit($extendImplicit, Closure $resolver) {  Validator::extendImplicit($extendImplicit, $resolver);  return $this; } /**  * extend  *  * @param string   $rule  * @param /Closure|string $extension  * @param string   $message  *  * @return $this  */ public function extend($rule, $extension, $message = null) {  Validator::extend($rule, $extension, $message);  return $this; } /**  * before (extend(),resolver())  *  * @return $this  */ public function before() { } /**  * after(sometimes())  *  * @return $this  */ public function after() { }}

新建中間件

<?phpnamespace App/Http/Middleware;use Closure;use /Illuminate/Http/Request;class ValidateAdminMiddleware{ /**  * This namespace is applied to the controller routes in your routes file.  *  * In addition, it is set as the URL generator's root namespace.  *  * @var string  */ protected $namespace = 'App/Http/Validators'; /**  * Handle an incoming request.  *  * @param /Illuminate/Http/Request $request  * @param /Closure     $next  *  * @return mixed  */ public function handle(Request $request, Closure $next, $validator = null) {  if ($request->isMethod('POST')) {   $type = $request->segment(1);   if ($validator) {    $validator = $this->namespace . '//' . studly_case($type) . '//' . studly_case($validator) . 'Validator';    $validator = new $validator($request->all());    if (!$validator->passes()) {     if ($request->isAjax()) {      return $validator->errors()->first();     } else {      return redirect()->back()      ->withErrors($validator->getValidator())      ->withInput();     }    }   }  }  return $next($request); }}

新建 TestTestValidator

<?phpnamespace App/Http/Validators/Admin;use App/Http/Validators/AbstractValidator;class TestValidator extends AbstractValidator{ /**  * Validation rules  *  * @var Array  */ protected $rules = array(  'name' => ['required', 'test', 'min:1'], ); /**  * Validation messages  *  * @var Array  */ protected $messages = array(  'name.required' => '必填',  'name.min' => '最少1個字符',  'name.test' => '測試', ); /**  * 自定義驗證規則或者擴展Validator類  */ public function before() {  $this->extend('test', function ($attribute, $value, $parameters) {   return bool;  }); }}

路由中如何使用

Route::post('/', ['middleware' => ['valiAdmin:Test'], 'uses' => 'IndexController@test']);

具體使用可以自行配置~

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 南召县| 永州市| 新田县| 甘泉县| 梅州市| 花垣县| 汤原县| 恭城| 丹东市| 河曲县| 南江县| 辽源市| 祁阳县| 米林县| 梁河县| 迭部县| 渭源县| 东乡族自治县| 通城县| 库车县| 高碑店市| 伊川县| 阿坝| 厦门市| 甘谷县| 南涧| 兴山县| 阳山县| 澄江县| 同德县| 万源市| 清镇市| 丹寨县| 保靖县| 禄劝| 松溪县| 华容县| 庆城县| 莫力| 密云县| 西乌珠穆沁旗|