如何优雅的使用 laravel 的 validator验证方法

如何优雅的使用 laravel 的 validator验证方法,第1张

概述web 开发过程中经常会需要进行参数验证,这篇文章主要介绍了如何优雅的使用 laravel 的 validator验证方法,非常具有实用价值,需要的朋友可以参考下

web 开发过程中经常会需要进行参数验证,laravel 中我们常用 valIDator 或者 request 这两种方法来进行验证,但是这两种验证都不是很方便进行自定义提示信息,自定义验证规则,所以下面来介绍一种很方便的用法:

新建抽象类


namespace ApphttpValIDators;

use ValIDator;

abstract class AbstractValIDator

{

/**

* ValIDator

*

* @var IlluminateValIDationFactory

*/

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->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,$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,$message);

return $this;

}

/**

* before (extend(),resolver())

*

* @return $this

*/

public function before()

{

}

/**

* after(sometimes())

*

* @return $this

*/

public function after()

{

}

}

新建中间件


namespace ApphttpMIDdleware;

use Closure;

use IlluminatehttpRequest;

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 = 'ApphttpValIDators';

/**

* Handle an incoming request.

*

* @param IlluminatehttpRequest $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


namespace ApphttpValIDatorsadmin;

use ApphttpValIDatorsAbstractValIDator;

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']);

具体使用可以自行配置~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持内存溢出。

总结

以上是内存溢出为你收集整理的如何优雅的使用 laravel 的 validator验证方法全部内容,希望文章能够帮你解决如何优雅的使用 laravel 的 validator验证方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1268843.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存