本篇文章給大家分享的是有關(guān)Laravel中怎么實(shí)現(xiàn)表單驗(yàn)證分層設(shè)計(jì),小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

白沙黎族ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
composer require w7/engine-validate
首先此驗(yàn)證器也是基于illuminate/validation的,關(guān)于它的詳細(xì)說明可以直接查看它的文檔,這里就不過多說明了。
首先我們建立一個(gè)和控制器相對應(yīng)的驗(yàn)證層
app ├── Http │ ├── Controllers │ │ └── UserController.php │ └── Validate │ └── UserValidate.php
驗(yàn)證器代碼:
class UserValidate extends Validate{
protected $rule = [
'user' => 'required|email',
'pass' => 'required|alpha_num'
];
protected $message = [
'user.required' => '賬號(hào)不可為空',
'pass.required' => '密碼不可為空',
];
protected $customAttributes = [
'user' => '賬號(hào)',
'pass' => '密碼',
];}控制器代碼:
class UserController extends BaseController{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function login(Request $request)
{
$data = UserValidate::make()->check($request->all());
}}這個(gè)時(shí)候,如果值不符合要求,會(huì)拋出一個(gè)ValidateException異常,我們可以選擇手動(dòng)捕獲,也可以選擇在異常捕獲類里面做一個(gè)全局的處理:
public function render($request, Throwable $e)
{
if ($e instanceof ValidateException) {
return response()->json([
'code' => -1,
'message' => $e->getMessage()
]);
}
return parent::render($request, $e);
}這樣我們就不需要再控制器里面管理任何的驗(yàn)證異常了。
此時(shí),控制器中的$data一定是符合我們需求的數(shù)據(jù),然后可以緊接著做對應(yīng)的業(yè)務(wù)處理
這個(gè)時(shí)候,如果我們的UserController控制器中又添加了一個(gè)register方法,在以上兩個(gè)字段的需求同時(shí)增加了name,應(yīng)該如何處理呢?
我們可以使用類的$scene屬性來指定某一場景下需要驗(yàn)證的字段
驗(yàn)證器代碼修改如下:
class UserValidate extends Validate{
protected $rule = [
'user' => 'required|email',
'pass' => 'required|alpha_num',
'name' => 'required|alpha'
];
protected $message = [
'user.required' => '賬號(hào)不可為空',
'pass.required' => '密碼不可為空',
];
protected $customAttributes = [
'user' => '賬號(hào)',
'pass' => '密碼',
'name' => '用戶名稱',
];
protected $scene = [
'login' => ['user', 'pass'],
'register' => ['user', 'pass', 'name']
];}此時(shí):login場景對應(yīng)的驗(yàn)證user和pass字段,而register場景對應(yīng)的驗(yàn)證user,pass,name字段
控制器代碼修改如下:
class UserController extends BaseController{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function login(Request $request)
{
$data = UserValidate::make()->scene('login')->check($request->all());
}
public function register(Request $request)
{
$data = UserValidate::make()->scene('register')->check($request->all());
}}使用驗(yàn)證器的scene方法來指定當(dāng)前需要驗(yàn)證的場景名稱
默認(rèn)我們一個(gè)控制器對應(yīng)一個(gè)驗(yàn)證器,一個(gè)方法對應(yīng)一個(gè)場景名稱,基于此特點(diǎn),我們可以編寫一些更為簡易的方法來解決驗(yàn)證,我們可以編寫一個(gè)中間件來解決此問題,點(diǎn)擊查看文檔說明,中間件完整命名空間為:Itwmw\Validate\Middleware\Laravel\ValidateMiddleware
首先我們需要為他指定控制器和驗(yàn)證器的對應(yīng)關(guān)系,在app/Providers目錄下新建一個(gè)ValidateServiceProvider.php文件,寫入如下代碼:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Itwmw\Validate\Middleware\ValidateMiddlewareConfig;
class ValidateServiceProvider extends ServiceProvider{
public function register()
{
ValidateMiddlewareConfig::instance()
->setAutoValidatePath('App\\Http\\Controllers\\', 'App\\Http\\Validate\\');
}}其中setAutoValidatePath為指定控制器和驗(yàn)證器的對應(yīng)關(guān)系,可以設(shè)定多個(gè),不限制數(shù)量,然后我們將ValidateServiceProvider注冊一下,在config/app.php文件中找到providers,在其中添加App\Providers\ValidateServiceProvider::class
注意:不可以放在
Illuminate\Validation\ValidationServiceProvider::class之前
這個(gè)時(shí)候,我們可以將中間件注冊為全局中間件,也可以不注冊,注冊方法:中間件《Laravel 7 中文文檔》
定義路由:
Route::middleware(ValidateMiddleware::class)->group(function () {
Route::any('/login', [\App\Http\Controllers\UserController::class, 'login']);
Route::any('/register', [\App\Http\Controllers\UserController::class, 'register']);});控制器代碼修改如下:
class UserController extends BaseController{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function login(Request $request)
{
$data = get_validate_data($request);
}
public function register(Request $request)
{
$data = get_validate_data($request);
}}以上就是Laravel中怎么實(shí)現(xiàn)表單驗(yàn)證分層設(shè)計(jì),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站標(biāo)題:Laravel中怎么實(shí)現(xiàn)表單驗(yàn)證分層設(shè)計(jì)
鏈接分享:http://chinadenli.net/article6/ipgcig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、網(wǎng)站改版、網(wǎng)站收錄、軟件開發(fā)、虛擬主機(jī)、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)