Итак, в основном вам нужно попытаться манипулировать данными запроса до того, как произойдет проверка.Вы можете сделать это в своем классе FormRequest
, переопределив один из методов, вызываемых перед проверкой.Я обнаружил, что это лучше всего работает при переопределении getValidatorInstance
.Затем вы можете получить существующие данные, добавить к нему свой слаг и затем заменить данные в запросе, все до проверки:
protected function getValidatorInstance()
{
$data = $this->all();
$data['slug'] = str_slug($data['name']);
$this->getInputSource()->replace($data);
return parent::getValidatorInstance();
}
Вы также можете добавить правила для своего слага в метод правил какхорошо:
public function rules()
{
return [
"name" => 'required|string|unique:book_genres,name',
"slug" => 'required|string|unique:book_genres,slug',
];
}
Итак, ваш класс будет выглядеть примерно так:
class BookGenreCreate extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|string|unique:book_genres,name',
'slug' => 'required|string|unique:book_genres,slug',
];
}
protected function getValidatorInstance()
{
$data = $this->all();
$data['slug'] = str_slug($data['name']);
$this->getInputSource()->replace($data);
return parent::getValidatorInstance();
}
}
Теперь, когда запрос поступит на ваш контроллер, он будет проверен, и вы сможете получить доступ к слагуиз объекта запроса:
class YourController extends Controller
{
public function store(BookGenreCreate $request)
{
$slug = $request->input('slug');
// ...
}
}