Хороший способ сделать это в Laravel - с помощью Запросы формы . Вы можете создать класс для вашего запроса, который расширяет класс FormRequest (давайте предположим, что вы называете его StorePost
для этого примера).
В этом классе вы можете использовать метод rules
для установки правил проверки Примерно так:
public function rules()
{
return [
'name_en' => 'required',
'name_de' => 'required',
];
}
Чтобы добавить ключи slug_
, вы можете использовать метод prepareForValidation . Этот метод можно использовать для добавления данных в запрос с помощью метода merge
, например:
protected function prepareForValidation()
{
$this->merge([
'slug_en' => Str::slug($this->name_en),
'slug_de' => Str::slug($this->name_de)
]);
}
Поскольку это происходит до проверки, вы даже можете добавить проверку к своим ключам slug_
в rules()
method.
Таким образом, чтобы фактически использовать этот класс, вы можете просто напечатать имя класса в вашем методе контроллера, используя Laravel magi c. Ваш действительно аккуратный контроллер теперь может выглядеть следующим образом:
public function store(StorePost $request)
{
Post::create($request->all()); // or specify the keys you want inside the `all()` method
// ...
}
И это так просто! Проверка запроса формы на самом деле произойдет до того, как будет запущен метод контроллера, поэтому вы можете быть уверены, что проверенные данные будут правильными.
Конечно, вы можете добавить любые методы, которые вы хотите, внутри класса запроса формы, таким образом, есть много разных способов достижения этого, например, с помощью метода getPostData
, который возвращает массив с включенными значениями слагов.