0

Custom Validation Rules In Laravel 5.5

Bài dịch từ trang developer.telerik.com

Defining The Rule

Tôi sẽ sử dụng một số code tôi vừa viết trong một ứng dụng thực tế để chứng minh tính năng này. Trong ứng dụng của tôi, tôi cần phải xác minh rằng một repository GitHub và branch thực sự tồn tại. Tất nhiên, cách duy nhất để thực hiện điều này là gọi tới API của GitHub. Validation requirement này là một ứng cử viên tuyệt vời để gói trong một custom validation rule. Để bắt đầu, chúng ta chỉ đơn giản xác định một class với hai method: passes và message. Tôi đặt class của tôi trong namespace App \ Rules:

<?php

namespace App\Rules;

use App\Source;
use Illuminate\Contracts\Validation\Rule;

class ValidRepository implements Rule
{
    /**
     * The source control provider instance.
     *
     * @var \App\Source
     */
    public $source;

    /**
     * The branch name.
     *
     * @var string
     */
    public $branch;

    /**
     * Create a new rule instance.
     *
     * @param  \App\Source  $source
     * @param  string  $branch
     * @return void
     */
    public function __construct($source, $branch)
    {
        $this->source = $source;
        $this->branch = $branch;
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        if (! $this->source instanceof Source) {
            return false;
        }

        return $this->source->client()->validRepository(
            $value, $this->branch
        );
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The given repository is invalid.';
    }
}

Chúng ta hãy cùng đọc hiểu mã này. Phương thức pass sẽ nhận các đối số $attribute và $value từ Validator Laravel, $attribute là tên của trường cần xác nhận, trong khi $value là giá trị của trường. Phương thức này chỉ cần trả lại đúng hoặc sai, tùy thuộc vào việc giá trị đã cho là hợp lệ hay không. Trong ví dụ của tôi, Source object là một mô Eloquent model đại diện cho một nhà cung cấp kiểm soát nguồn như GitHub. Phương thức thông báo sẽ trả lại thông báo lỗi thích hợp để sử dụng khi xác nhận không thành công. Tất nhiên, trong phương pháp này bạn có thể lấy ra một chuỗi từ các tập tin dịch của bạn.

Using The Rule

Khi chúng tôi đã xác định custom validation rule của chúng tôi, chúng tôi có thể sử dụng nó trong một request. Để gán quy tắc cho thuộc tính, chúng tôi chỉ đơn giản thực hiện nó trong mảng các quy tắc của chúng tôi. Trong ví dụ này, tôi sẽ sử dụng phương thức xác nhận, có sẵn trực tiếp từ Request object trong Laravel 5.5:

<?php
use App\Rules\ValidRepository;
$request->validate([
    'repository' => [
        'required', 
        new ValidRepository($this->source(), $request->branch)
    ]
]);

Tất nhiên, bạn cũng có thể sử dụng custom rule của mình từ bên trong Form Request hoặc bất kỳ vị trí nào khác mà bạn thực hiện xác nhận. Tính năng mới này cung cấp một cách nhanh chóng, dễ dàng để xác định các custom validation rule và tôi đã sử dụng nhiều tính năng này trong code của riêng tôi. Tôi hy vọng bạn cũng sẽ thế. Enjoy!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí