給大家分享一個輪子 form-request-validation,無恥求star。 github地址
開發這個輪子的目的是為一些比較老舊的專案,或者一些沒有請求驗證層的專案可以更便捷的進行資料驗證,而不需要用很多的 if 去判斷,而且還能清晰的把一些基本驗證和業務程式碼分離開來,使得程式碼結構更加的清晰,易於維護。
$ composer require slpcode/form-request-validation -vvv
該輪子有兩個比較重要的類 FormRequest和Validator,FormRequest主要是用來被繼承的,用於自行搭建一個驗證層,內部預設會對請求的$_GET, $_POST,$_FILES資料進行驗證,如果請求傳遞的資料是json並且請求頭為json請求頭,那麼會對json資料進行驗證。用法和Laravel的表單驗證一樣,因為這個輪子是基於laravel的 illuminate/validation 的。
<?php
use Slpcode\FormRequestValidation\FormRequest;
class TestRequest extends FormRequest
{
/**
* 設定驗證規則.
*
* @return array
*/
protected function rules()
{
return [
'name' => 'required|max:20',
'age' => 'required|min:6',
];
}
/**
* 設定驗證錯誤資訊.
*
* @return array
*/
protected function messages()
{
return [
'name.required' => '名字不能為空',
'name.max' => '名字不能超過20位'
];
}
/**
* 自定義欄位名稱.
*
* @return array
*/
protected function attributes()
{
return [];
}
}
<?php
// 進行驗證,如果驗證不通過則會丟擲 Slpcode\FormRequestValidation\Exceptions\ValidationException 異常
// 通過後返回request例項
(new TestRequest)->check();
也可以使用validator物件直接操作驗證,這種方法是單純的進行資料驗證,需要自己傳遞要驗證的資料到該Validator例項的make方法
<?php
// 直接建立驗證器物件的用法
$validator = \Slpcode\FormRequestValidation\Validator::getInstance();
//驗證
$rules = [
'name' => 'required|min:5|max:20',
'age' => 'required|max:2',
///...
];
$data = [
///...
];
// 可選
// 自定義錯誤訊息
$messages = [
'name.required' => '名稱不能為空',
//...
];
// 可選
// 自定義屬性名稱
$attributes = [
'name' => '使用者名稱',
'age' => '年齡',
];
$validatorObj = $validator->make($data, $rules, $messages, $attributes);
//判斷驗證是否通過
if ($validatorObj->fails()) {
//未通過
//輸出錯誤訊息
dd($validatorObj->messages()->all());
} else {
}
FormRequest擴充套件驗證
預設帶的驗證方式也許不能滿足我們業務的需求,所以需要擴充套件驗證,我們可以自己建立一個驗證基類,例如:BaseRequest,然後繼承
\Slpcode\FormRequestValidation\FormRequest,然後我們其它的驗證類再繼承這個BaseRequest即可。
<?php
class BaseRequest extends \Slpcode\FormRequestValidation\FormRequest
{
public function extend()
{
$this->getValidator()->extend('mobile', function ($attribute, $value, $parameters, $validator) {
return preg_match("/^1[3,4,5,6,7,8,9]{1}[0-9]{9}$/", $value);
}, ':attribute 格式不正確');
}
}
// 使用擴充套件的mobile
class TestRequest extends BaseRequest
{
/**
* 設定驗證規則.
*
* @return array
*/
protected function rules()
{
return [
'phone' => 'required|mobile',
];
}
}
Validator擴充套件驗證
$validator = \Slpcode\FormRequestValidation\Validator::getInstance();
$validator->extend(
'mobile',
function ($attribute, $value, $parameters, $validator) {
return preg_match("/^1[3,4,5,6,7,8,9]{1}[0-9]{9}$/", $value);
},
':attribute 格式不正確'
);
預設內建了英文(en)和中文(zh-CN)兩種語言包 語言列表可以從這裡拿 https://github.com/caouecs/Laravel-lang
FormRequest語言包設定
<?php
class BaseRequest extends \Slpcode\FormRequestValidation\FormRequest
{
protected $translation_path = __DIR__ . '/lang';
protected $translation_locale = 'en';
}
// 或
(new TestRequest)->setLang('en', '語言包路徑');
Validator語言包設定
<?php
// 內部有兩種語言包 en 和 zh-CN
$validator = \Slpcode\FormRequestValidation\Validator::getInstance('en', '語言包路徑');
如果需要完全無依賴版本,推薦overtrue大神的 https://github.com/overtrue/validation