Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Перед методом контроллера данный валидируются:
class CategoryRequest extends Request
.....
public function rules()
{
return [
'id_parent' => 'exists:categories,id',
'name' => 'required',
'sysname' => 'sysname|unique:categories,sysname,'.$this->route('categories'),
'icon' => 'image'
];
}
В контроллере если sysname не заполнен, то мы генерим его из name
public function store(\App\Http\Requests\admin\CategoryRequest $request) {
$data = $request->all();
$data['sysname'] = $data['sysname'] ?: Slug::make($data['name'], '_');
После чего нам необходимо опять проверить значение на уникальность в таблице.
Вопрос: как можно проверить $request->input('sysname') на пустоту и подставить значение до отработки CategoryRequest чтобы избежать повторной проверки?
Не в сети
Как вариант, переопределить метод prepareForValidation() в CategoryRequest
class CategoryRequest extends Request
.....
protected function prepareForValidation()
{
if(empty($this->request->get('sysname'))) {
$this->request->set('sysname', Slug::make($this->request->get('name'), '_'));
// Ну или еще как...
}
}
public function rules()
{
return [
'id_parent' => 'exists:categories,id',
'name' => 'required',
'sysname' => 'sysname|unique:categories,sysname,'.$this->route('categories'),
'icon' => 'image'
];
}
Т.е. получается, что перед валидацией проверяем, если пустой sysname, то вставляем значение, которое нужно.
Так будет точно работать, но... возможно, можно как-то и по другому...
Не в сети
Как вариант, переопределить метод prepareForValidation() в CategoryRequest
class CategoryRequest extends Request ..... protected function prepareForValidation() { if(empty($this->request->get('sysname'))) { $this->request->set('sysname', Slug::make($this->request->get('name'), '_')); // Ну или еще как... } } public function rules() { return [ 'id_parent' => 'exists:categories,id', 'name' => 'required', 'sysname' => 'sysname|unique:categories,sysname,'.$this->route('categories'), 'icon' => 'image' ]; }
Т.е. получается, что перед валидацией проверяем, если пустой sysname, то вставляем значение, которое нужно.
Так будет точно работать, но... возможно, можно как-то и по другому...
Не работает, в prepareForValidation даже не заходит. В документации такого метода не нашел. Уверены в его существовании?
Не в сети
Laravel 5.4
Request наследует FormRequest, который в свою очередь использует trait ValidatesWhenResolvedTrait там и есть пустой метод prepareForValidation
... Посмотрел 5.3 - тоже есть..
Не в сети
Да, в версиях ниже нет такого... видимо добавили позже, но тогда можно написать свой метод и вызвать до валидации.
class CategoryRequest extends Request
.....
public function validate()
{
$this->ВашМетод();
parent::validate();
}
private function ВашМетод()
{
if(empty($this->request->get('sysname'))) {
$this->request->set('sysname', Slug::make($this->request->get('name'), '_'));
// Ну или еще как...
}
}
public function rules()
{
return [
'id_parent' => 'exists:categories,id',
'name' => 'required',
'sysname' => 'sysname|unique:categories,sysname,'.$this->route('categories'),
'icon' => 'image'
];
}
Не в сети
Да, в версиях ниже нет такого... видимо добавили позже, но тогда можно написать свой метод и вызвать до валидации.
Так работает, большое спасибо.
Не в сети
Страницы 1