اعتبارسنجی فرم ها در لاراول قسمت دوم

1398/03/03
97
اعتبارسنجی فرم ها در لاراول قسمت دوم

در قسمت قبل اعتبارسنجی را به دو روش بیان کردیم:


روش اول درون کلاس کنترلر و روش دوم ایجاد یک لایه به Requestها.

اکنون می خواهیم درون Request به صورت داینامیک عمل کنیم به صورتی که هر متد درون کنترلر اعتبارسنجی مربوط به خود را داشته باشد.

در ابتدا یک کنترلر با نام CategoryController ایجاد می کنیم:

php artisan make:controller CategoryController --resource

 

این کنترلر دارای متدهای زیر است:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class CategoryController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

 

اکنون یک کلاس ایجاد درخواست فرم با دستور زیر ایجاد می کنیم:

php artisan make:request CategoryRequest

 

این دستور کلاس CategoryRequest در مسیر app/Http/Requests برای ما ایجاد می کند.

کلاس مورد نظر به شکل زیر است:

<?php

namespace App\Http\Requests\Admin;

use App\Category;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Request;
use Illuminate\Routing\Route;
use Illuminate\Validation\Rule;

class CategoryRequest extends FormRequest
{

    public function authorize()
    {
        return false;
    }

    public function rules(Request $request, Route $route)
    {
        
    }

}

 

اکنون می خواهیم فیلدهایی که بر روی آنها اعتبارسنجی اعمال شوند را بر اساس متد مشخص تعریف کنیم.
بر این اساس کلاس CategoryRequest ما دستخوش تغییر خواهد شد.

برای اینکه ما بتوانیم به تک تک متدهای درون controller دسترسی داشته باشیم از طریق Route $route و متد getActionMethod() به هر متدی که درون controller مورد نظر است،دسترسی داریم. 

اکنون با استفاده از دستور switch case به مقدار مورد نطر با توجه به متد درون controller دسترسی داریم و اعتبارسنجی خود را ایجاد می کنیم. 

class CategoryRequest extends FormRequest
{

    public function authorize()
    {
        return false;
    }

    public function rules(Request $request, Route $route)
    {

        $rules = [];

        switch ($route->getActionMethod()) {

            case 'destroy': {

                $rules = [
                    ...
                ];
                break;
            }

            case 'store': {

                $rules = [
                    ...
                ];
                break;
            }

            
        return $rules;
    }

}

 

۱-مقدار متد authorize  را برابر true قرار می دهیم.

۲- یک دستور switch case ایجاد می کنیم که بر اساس متد مورد نظر درون controller،اعتبارسنجی ما را تعیین می کند.

۳- مقدار ;[] = relus$  را بر اساس نیاز و با توجه به متد مورد نظر پر می کنیم.

 

class CategoryRequest extends FormRequest
{

    public function authorize()
    {
        return true;
    }

    public function rules(Request $request, Route $route)
    {

        $rules = [];

        switch ($route->getActionMethod()) {

            case 'destroy': {

                $rules = ['id' => 'required|exists:categories,id'];
                break;
            }

            case 'store': {

                $rules = [
                    'name' => 'required|unique:categories|max:255',
                    'children.*.name' => 'required',
                    'images.*.file_path' => 'required|mimes:jpg,png,jpeg',
                ];
                break;
            }

            case 'update': {

                $rules = [
                    'name' => 'required|unique:categories,id,' . $request->id . '|max:255',
                    'children.*.name' => 'required',
                    'images.*.file_path' => 'required|mimes:jpg,png,jpeg|sometimes',
                ];
                break;
            }

            default:
                break;
        }


        return $rules;
    }

}

به همین راحتی توانستیم هر متدی که در کنترلر ما وجود دارد را به صورت کاملا شخصی اعتبارسنجی کنیم. 

نظرات (0)
هنوز نظری ثبت نشده است
برای ثبت نظر ابتدا وارد سایت شوید