Sanes
@Sanes

Как в Laravel prepareForValidation вернуть обработанное значение при ошибке валидации?

Если отправить пустое поле alias, оно сформируется на основе другого поля pagetitle.
Если не проходит валидация, то надо вернуть обработанное поле в форму.
Как это можно сделать?
CategoryStoreRequest

<?php

namespace App\Http\Requests\Admin;

use Illuminate\Foundation\Http\FormRequest;
use Str;

class CategoryStoreRequest 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()
    {
        return [
            'pagetitle' => 'required|string|min:5|max:255|unique:categories,pagetitle',
            'alias' => 'required|string|min:2|max:255|unique:categories,alias',

        ];
    }

    protected function prepareForValidation()
    {
        if($this->alias == null)
        {
            $this->merge([
                'alias' => Str::slug($this->pagetitle),
            ]);
        }
        else
        {
            $this->merge([
                'alias' => Str::slug($this->alias),
            ]);            
        }
    }

}

  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
Sanes
@Sanes Автор вопроса
public function rules()
    {
        return [
            'pagetitle' => 'required|string|min:5|max:255|unique:categories,pagetitle',
            'alias' => 'required|string|min:2|max:255|unique:categories,alias',

        ];
    }

    protected function prepareForValidation()
    {
        if($this->alias == null)
        {
            $this->merge([
                'alias' => Str::slug($this->pagetitle),
            ]);
        }
        else
        {
            $this->merge([
                'alias' => Str::slug($this->alias),
            ]);            
        }
    }
    
    public function withValidator($validator)
    {
        $validator->after(function ($validator) {
            request()->merge([
                'alias' => $this->request->get('alias')
            ]);

            // $validator->errors()->add('alias', 'Something is wrong with this field!');
        });
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
iMedved2009
@iMedved2009
Не люблю людей
Sanes, вопрос прочитал. Но ваш подход не правилен и не понятен. Окей забыли про single responsibility principle, у вас валидатор не только валидирует - но и создает данные, если вы банально модель решите создавать не только по пользовательскому щелчку а еще где нибудь в коде - вы тоже будете прогонять через CategoryRequest? Или появится еще одно место где будет генерироваться slug?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы