PagesRequest.php 3.32 KB
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class PagesRequest 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<string, mixed>
     */
    public function rules()
    {
        $unique = 'unique:pages,slug';
        if (in_array($this->route()->getName(), ['admin.update-page'])) {
            // получаем модель Pages через маршрут admin/editor-pages/edit/{page}
            $model = $this->route('page');
            /*
             * Проверка на уникальность slug, исключая этот пост по идентификатору:
             * 1. posts - таблица базы данных, где проверяется уникальность
             * 2. slug - имя колонки, уникальность значения которой проверяется
             * 3. значение по которому из проверки исключается запись таблицы БД
             * 4. поле, по которому из проверки исключается запись таблицы БД
             * Для проверки будет использован такой SQL-запрос к базе данных:
             * SELECT COUNT(*) FROM `pages` WHERE `slug` = '...' AND `id` <> 17
             */
            $unique = 'unique:pages,slug,'.$model->id.',id';
        }

        return [
            'name' => [
                'required',
                'string',
                'min:3',
                'max:255',
            ],
            'slug' => [
                'required',
                'max:255',
                 $unique,
                'regex:~^[-_a-z0-9]+$~i',
            ],
            'anons' => [
                'required',
                'min:500',
            ],
            'text' => [
                'required',
                'min:500',
            ],
            'image' => [
                'mimes:jpeg,jpg,png',
                'max:15000'
            ],
        ];
    }

    public function messages() {
        return [
            'required' => 'Поле :attribute обязательно для ввода',
            'unique' => 'Поле :attribute должно быть уникальным',
            'mimes' => 'Допускаются файлы только с расширением jpeg,jpg,png',
            'min' => [
                'string' => 'Поле «:attribute» должно быть не меньше :min символов',
                'integer' => 'Поле «:attribute» должно быть :min или больше',
                'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт'
            ],

            'max' => [
                'string' => 'Поле «:attribute» должно быть не больше :max символов',
                'integer' => 'Поле «:attribute» должно быть :max или меньше',
                'file' => 'Файл «:attribute» должен быть не больше :max Кбайт'
            ],

        ];
    }
}