Сейчас как никогда важно, чтобы данные в ваших приложениях были достоверными, точными и соответствовали всем системным требованиям. Он направлен на обеспечение согласованности данных и предотвращение уязвимостей в системе безопасности.

Laravel делает проверку данных простой и интуитивно понятной. Он следует архитектуре контроллера представления модели (MVC) и требует только общих знаний о PHP и концепциях объектно-ориентированного программирования (ООП). Более того, Laravel предлагает несколько методов проверки входящих данных.

Изучите некоторые из этих подходов и способы применения правил проверки к вашему набору данных.

Проверка данных в Laravel стала проще

Laravel предоставляет несколько готовых к использованию правил проверки, когда пользователи вашего приложения отправляют данные через формы. Вы можете пометить поля ввода как обязательные, установить минимальную или максимальную длину и потребовать уникальные (не повторяющиеся) записи и действительные адреса электронной почты. Валидатор Laravel проверяет, удовлетворяет ли ввод этим правилам или любым другим, которые вы укажете.

Эти правила проверки Laravel включают в себя:

  • required — Данные поля не должны быть нулевыми или пустыми.
  • array — Данные поля должны быть массивом PHP.
  • bail — Правило проверки прекращает выполнение после того, как обнаруживает первую ошибку проверки.
  • email — Данные поля должны быть действительным адресом электронной почты.
  • unique — Данные поля не должны иметь дубликатов в таблице базы данных.

У всех методов проверки есть свои плюсы и минусы, но их разнообразие позволяет выбрать лучший подход для ваших нужд. В зависимости от выбранного вами метода проверка Laravel может происходить несколькими способами, с ручными или автоматическими сообщениями об ошибках.

Самый распространенный метод — code>validate, используемый для входящих HTTP-запросов. Этот метод привязан к данным запроса, выполняя правила проверки. Вы можете разделить правила для каждого поля запятыми, как показано в примере ниже.

use Illuminate\Http\Request;
 
public function store (Request $request){
  $validated = $request->validate([
        'email' => ['required, unique:users, email, bail'],
        'name' => ['required'],
    ]);

}

Здесь, email является обязательным входом, то есть он не может быть нулевым. Кроме того, он должен быть уникальным в users таблицу базы данных, гарантируя, что один и тот же адрес электронной почты не будет зарегистрирован дважды. Последнее правило требует, чтобы адрес электронной почты также был действительным. В противном случае процесс проверки прекращается. Поле имени является обязательным, но не имеет других правил.

Если какое-либо правило проверки Laravel не работает, ответ генерируется автоматически.

Не позволяйте одной ошибке данных испортить всю вашу тяжелую работу! Проверяйте свои данные и сохраняйте свой проект в целости и сохранности 🛡️Нажмите, чтобы твитнуть

Основы проверки

Чтобы лучше понять методы проверки, рассмотрим следующий пример. Вы определите маршрут для конечной точки и создадите контроллер для проверки и обработки данных запроса.

Во-первых, создайте простую конечную точку, которая позволит пользователям хранить свои электронные письма и пароли.

Определить маршрут

Маршруты Laravel определены в маршруты/web.php файл для веб-приложения или маршруты /api.php для API. Для этого примера используйте API.php:

use App\Http\Controllers\UserController;
 
Route::post('/store', [UserController::class]);

Создайте контроллер

Запустите эту Artisan-команду, чтобы создать контроллер:

php artisan make:controller

UserController

Эта команда создает UserController.php файл в приложение/http/контроллеры каталог.

Теперь определите store метод проверки данных, поступающих в конечную точку хранилища, перед их сохранением.

В этом примере будут проверены следующие поля с использованием этих правил:

  • электронная почта — Должен быть уникальным, действительный адрес электронной почты и должен быть обязательным
  • пароль — Должен иметь минимальную длину, подтверждение пароля и быть обязательным
  • возраст — Должен быть числом и должен быть обязательным
<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
    /**
     * Store new user details.
     *
     */
    public function store(Request $request){
        $validated = $request->validate([
            'email' => 'required|unique:users|email',
            'age' => 'required|numeric',
            'password' => 'required|min:7|confirmed'
        ]);
        // After user data is validated, logic to store the data
    }

}

confirmed Правило позволяет вам дважды запрашивать конкретное поле, чтобы убедиться, что данные точны, например, пользователи повторно вводят свои пароли во время регистрации. Для этого правила требуется поле с именем password_confirmationданные которого должны соответствовать пароль поле.

Отображение сообщений об ошибках

Если критерии проверки соблюдены, ваш код продолжит работать в обычном режиме. Если проверка не пройдена, IlluminateValidationValidationException генерируется исключение, и возвращается соответствующий ответ об ошибке.

Пример основан на API, который возвращает 422 Unprocessable Entity HTTP-ответ в формате JSON. Для веб-приложений он будет перенаправлять на предыдущий URL-адрес для отображения сообщения об ошибке, а данные запроса будут переданы в сеанс.

Вы можете использовать $errors переменная в ваших представлениях для отображения возвращаемых ошибок:

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

Вы также можете просмотреть только первую ошибку или просмотреть их все в цикле.

// Fetch all errors
$errors->all()

// Fetch only the first error
$errors->first()

Повторное заполнение форм

Повторное заполнение форм избавляет пользователей от повторного ввода информации, поэтому они могут сосредоточиться на исправлении ошибки. В примере с ошибкой адреса электронной почты вы можете повторно заполнить оставшуюся часть формы, вызвав старое значение для name поле.

$name = $request-> old('name')

//Blade helper
<input type="text" name="name" value="{{ old('name') }}">

Это правило вернет null если не было предыдущего ввода.

Расширенная проверка

Laravel предоставляет другой метод написания валидаций, называемый запросами формы. Запрос формы — это настраиваемый класс запроса, который организует проверки и упорядочивает ваш контроллер.

Они имеют собственную логику проверки и авторизации, подходящую для больших объемов ввода, и могут использоваться для определения правил проверки и настройки сообщений об ошибках.

Чтобы создать запрос формы, запустите эту Artisan-команду:

php artisan make:request StoreUserRequest

Эта команда создает StoreUserRequest.php файл в приложение/http/запросы каталог и содержит два метода по умолчанию:

  • rules возвращает правила проверки для данных запроса.
  • authorize возвращает логическое значение, чтобы указать, есть ли у этого пользователя разрешение на выполнение запрошенного действия.

Преобразуйте предыдущий пример, чтобы использовать форму запроса.

<?php

namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        // Add logic to check if the user is authorized to submit this data.
        return true;
    }
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, mixed>
     */
    public function rules()
    {
        return [
            'email' => 'required|unique:users|email',
            'age' => 'required|numeric',
            'password' => 'required|min:7|confirmed'
        ];
    }

}

Чтобы настроить сообщения об ошибках этих правил, вы можете переопределить метод messages в FormRequest сорт.

/**

     * Get the error messages for the defined validation rules.
     *
     * @return array
     */
    public function messages()
    {
        return [
            'email.required' => 'An email address is required',
            'email.email' => 'The email address must be valid',
            'password.confirmed'=>'Re-type your password as 
password_confirmation, passwords does not match'
        ];

    }

Примечание: Имя данных и правило проверки разделяются точкой (.) перед данными сообщения.

Пользовательская проверка

Чтобы создать пользовательскую проверку, вы можете использовать Validator фасад вместо validate. Экземпляр валидатора содержит два аргумента: данные для проверки и массив правил проверки. Эти два аргумента передаются в ::make на фасаде валидатора, создавая новый экземпляр валидатора.

use Illuminate\Http\Request; 

public function store (Request $request){
        $validator = Validator::make($request->all(),[
            'email' => 'required|unique:users|email',
            'age' => 'required|numeric',
            'password' => 'required|min:7|confirmed'
        ]);
        if ($validator->fails()) {
            // Return errors or redirect back with errors
            return $validator->errors();
        }
 
        // Retrieve the validated input...
        $validated = $validator->validated();
        // Continue logic to store the data

    }

Если вы хотите добавить автоматический прямой, вы можете выполнить validate метод на уже существующем экземпляре валидатора. Если проверка не пройдена, запрос XHR создает ответ JSON с 422 Unprocessable Entity в качестве кода состояния, иначе пользователь будет немедленно перенаправлен.

$validator = Validator::make($request->all(),[
'email' => 'required|unique:users|email',
'password' => 'required|min:7|confirmed'
])->validate();

Вы также можете настроить свои сообщения об ошибках, передав третий аргумент с именем messages к Validate::make method:

$validator = Validator::make($request->all(),[
            'email' => 'required|unique:users|email',
            'age' => 'required|numeric',
            'password' => 'required|min:7|confirmed'
        ], $messages = [
            'required' => 'The :attribute field is required.',
]);

Примечание: :attribute заменяется именем проверяемого поля.

Работа с большими объемами данных может быстро выйти из-под контроля. Защитите свой проект (и свое здравомыслие!) с помощью проверки Laravel. Вот как 🤝Нажмите, чтобы твитнуть

Краткое содержание

Выполнение проверки данных имеет решающее значение для поддержания чистоты, правильности и полноты набора данных. Проверка данных позволяет устранить ошибки в ваших данных, которые потенциально могут повредить или иным образом повлиять на ваш проект. Проверка становится все более важной при работе в масштабе и с большими объемами данных.

Laravel предлагает множество гибких подходов для обеспечения целостности и точности данных, проходящих через ваше приложение. Вы можете реализовать сложную логику проверки с помощью стандартных и настраиваемых методов, что сделает вашу кодовую базу хорошо структурированной и более удобной для повторного использования.

Отправляйте свои приложения Laravel быстрее с услугами хостинга приложений Kinsta.