在Laravel中處理請(qǐng)求驗(yàn)證的示例

小編給大家分享一下在Laravel中處理請(qǐng)求驗(yàn)證的示例,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、沙雅網(wǎng)絡(luò)推廣、微信小程序、沙雅網(wǎng)絡(luò)營(yíng)銷(xiāo)、沙雅企業(yè)策劃、沙雅品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供沙雅建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:muchs.cn

Laravel 是網(wǎng)絡(luò)工匠的 PHP 框架。這有助于我們構(gòu)建強(qiáng)大的應(yīng)用程序和 API。很多人都知道有很多方法可以驗(yàn)證 Laravel 中的請(qǐng)求。處理請(qǐng)求驗(yàn)證是任何應(yīng)用程序中非常重要的部分。Laravel 有一些很好的功能,可以很好地處理這個(gè)問(wèn)題。

入門(mén)

我們大多數(shù)人都熟悉在控制器中使用驗(yàn)證器。這是處理傳入請(qǐng)求驗(yàn)證的最常用方法。

以下是我們的驗(yàn)證器的樣子 UserController

<?php
namespace App\Http\Controllers\API\v1\Users;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use App\Entities\Models\User;
class UserController extends Controller
{
    public function store(Request $request)
    {
        // validate incoming request
        $validator = Validator::make($request->all(), [
           'email' => 'required|email|unique:users',
           'name' => 'required|string|max:50',
           'password' => 'required'
       ]);
       if ($validator->fails()) {
            Session::flash('error', $validator->messages()->first());
            return redirect()->back()->withInput();
       }
       // finally store our user
    }
}

在控制器中驗(yàn)證

在控制器中驗(yàn)證傳入請(qǐng)求沒(méi)有任何問(wèn)題,但這不是最好的方法,你的控制器看起來(lái)很亂。在我看來(lái),這是不好的做法。控制器應(yīng)該只處理來(lái)自路由的一個(gè)處理請(qǐng)求并返回適當(dāng)?shù)捻憫?yīng)。

在控制器中編寫(xiě)驗(yàn)證邏輯將打破單一責(zé)任原則。我們都知道需求會(huì)隨著時(shí)間的推移而變化,每次需求變更時(shí),您的班級(jí)職責(zé)也會(huì)發(fā)生變化。因此,在單一班級(jí)中承擔(dān)很多責(zé)任使得管理變得非常困難。

Laravel 具有表單請(qǐng)求,一個(gè)包含驗(yàn)證邏輯的單獨(dú)請(qǐng)求類(lèi)。要?jiǎng)?chuàng)建一個(gè),您可以在 Artisan 命令下使用。

php artisan make:請(qǐng)求 UserStoreRequest

這將創(chuàng)建新的 Request 類(lèi) app\Http\Request\UserRequest

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserStoreRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'email' => 'required|email|unique:users',
            'name' => 'required|string|max:50',
            'password' => 'required'
        ];
    }
     /**
     * Custom message for validation
     *
     * @return array
     */
    public function messages()
    {
        return [
            'email.required' => 'Email is required!',
            'name.required' => 'Name is required!',
            'password.required' => 'Password is required!'
        ];
    }
}

Laravel Form Request 類(lèi)有兩個(gè)默認(rèn)方法 auth() 和 rules()。auth() 無(wú)論當(dāng)前用戶是否被允許請(qǐng)求,您都可以在方法中執(zhí)行任何授權(quán)邏輯。在 rules() 方法中,您可以編寫(xiě)所有驗(yàn)證規(guī)則。還有一種方法 messages() 可以傳遞自己的驗(yàn)證消息數(shù)組。

現(xiàn)在改變我們 UserController 使用我們 UserStoreRequest. 你可以輸入提示我們的請(qǐng)求類(lèi),它會(huì)在調(diào)用我們的控制器函數(shù)之前自動(dòng)解析和驗(yàn)證。

<?php
namespace App\Http\Controllers\API\v1\Users;
use App\Http\Controllers\Controller;
use App\Http\Requests\UserStoreRequest;
class UserController extends Controller
{
    public function store(UserStoreRequest $request)
    {
        // Will return only validated data
        $validated = $request->validated();
    }
}

所以我們的控制器現(xiàn)在很纖薄,易于維護(hù)?,F(xiàn)在我們的控制器不需要擔(dān)心任何驗(yàn)證邏輯。我們有自己的驗(yàn)證類(lèi),只有一個(gè)責(zé)任來(lái)處理驗(yàn)證,讓控制器在那里工作。

如果驗(yàn)證失敗,它會(huì)將用戶重定向到上一個(gè)位置并顯示錯(cuò)誤。取決于您的請(qǐng)求類(lèi)型錯(cuò)誤消息將在會(huì)話中閃爍。如果請(qǐng)求是 AJAX,則將返回帶有 422 狀態(tài)代碼的響應(yīng),并返回 JSON 格式的錯(cuò)誤。

回報(bào)

通過(guò)清理輸入來(lái)保持您的應(yīng)用程序和用戶的安全。在您的應(yīng)用程序中使用清潔劑,它將確保數(shù)據(jù)始終格式良好且一致。在許多情況下,由于愚蠢的格式錯(cuò)誤,驗(yàn)證失敗。

用戶輸入的移動(dòng)電話號(hào)碼為 + 99-9999-999999 或 + 99-(9999) - (999999)。這是非常常見(jiàn)的錯(cuò)誤,我們不能強(qiáng)迫我們的用戶再次重新輸入相同的細(xì)節(jié)。

其他一些例子是用戶輸入的電子郵件為 Foo@Bar.COM 或 FOO@Bar.com?;蛘咻斎朊趾托帐希?FOO **bAR 或 foo baR**

Sanitizer 包含在提供給驗(yàn)證器之前以通用格式轉(zhuǎn)換和過(guò)濾數(shù)據(jù)的方法。

我正在使用 Waavi/Sanitizer 包含許多過(guò)濾器的包。

Waavi / 數(shù)據(jù)清洗

讓我們 BaseFormRequest 為 Form Request 創(chuàng)建抽象類(lèi),并 SanitizesInput 在這里使用 trait。

<?php
namespace App\Http\Requests;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Http\JsonResponse;
use Waavi\Sanitizer\Laravel\SanitizesInput;
abstract class BaseFormRequest extends FormRequest
{
    use ApiResponse, SanitizesInput;
    /**
     * For more sanitizer rule check https://github.com/Waavi/Sanitizer
     */
    public function validateResolved()
    {
        {
            $this->sanitize();
            parent::validateResolved();
        }
    }
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    abstract public function rules();
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    abstract public function authorize();
}

所以現(xiàn)在我們可以寫(xiě) UserStoreRequest 下面的內(nèi)容。從我們的基類(lèi)擴(kuò)展您的表單請(qǐng)求,因此我們不必在所有請(qǐng)求類(lèi)中包含特征。

<?php
namespace App\Http\Requests;
class UserStoreRequest extends BaseFormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'email' => 'required|email|unique:users',
            'name' => 'required|string|max:50',
            'password' => 'required'
        ];
    }
    public function messages()
    {
        return [
            'email.required' => 'Email is required!',
            'name.required' => 'Name is required!',
            'password.required' => 'Password is required!'
        ];
    }
    /**
     *  Filters to be applied to the input.
     *
     * @return array
     */
    public function filters()
    {
        return [
            'email' => 'trim|lowercase',
            'name' => 'trim|capitalize|escape'
        ];
    }
}

SanitizesInputtrait 提供了一種 filters() 在提供給驗(yàn)證器之前格式化我們的請(qǐng)求數(shù)據(jù)的方法。filters() 方法返回有效過(guò)濾器的數(shù)組。在這里,我們將用戶電子郵件轉(zhuǎn)換為小寫(xiě)并修剪相同的方式將名稱轉(zhuǎn)換為大寫(xiě)并轉(zhuǎn)義任何 HTML 標(biāo)記。

看完了這篇文章,相信你對(duì)“在Laravel中處理請(qǐng)求驗(yàn)證的示例”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)頁(yè)名稱:在Laravel中處理請(qǐng)求驗(yàn)證的示例
新聞來(lái)源:http://muchs.cn/article24/ihgeje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、外貿(mào)建站、網(wǎng)站策劃網(wǎng)站設(shè)計(jì)、云服務(wù)器定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化