Почему-то сложилось такое мнение, на основе просмотренных видео материалов и примеров из интернета, что middleware используют только для проверки аутентификации и авторизации пользователей.
Есть ли, например, смысл использовать middlaware для проверки валидности данных передаваемых из формы в контроллер?
Помогите, пожалуйста, разобраться.
vlad3144 дорогой пользователь, настоятельно рекомендуем еще раз обратить самое пристальное внимание на п. 3.1 регламента работы сервиса (и, в особенности, на его последний абзац). В противном случае, ваши вопросы будут удаляться по причине тег-спама, а систематические нарушения приведут к блокировке учетной записи.
Начнем с того, что вы зачем-то приводите кусок выдранного неотформатированного кода, в котором куча непонятных объектов и подходов. Это просто неуважение к сообществу. Ок, мы не тупые, разберемся.
1.
public function store(Request $request, StoreBlogTag $store)
Ну мы типа поняли, что в StoreBlogTag хранятся правила валидации и ошибки для валидации для тэгов. Зачем это все нужно из текущего кода не понять. Как уже не раз отметили, все это можно заменить на Form Request Validation.
Зачем нам эта копипаста? Вы же вроде тэги создаете. А почему редиректите на `post/create` - как это можно понять? Что это нам вообще дает? Здесь какой-то специфический редирект? Иначе можно возложить это все на Ларавел и заменить на:
Зачем вообще в данном случае приводить такой сложный пример? Нельзя что ли простой create с mass-assignment привести? Зачем делать проверку по двум полям? Почему slug генерируется в контролере? Для slug вообще полно готовых решений в виде трэйтов.
4. $tag->save();
Это типа, если вдруг, с первого раза не сохранилось (метод firstOrCreate создает запись в БД), еще раз сохраним для подстраховочки :)
Короче, вот пример для топикстартера (возврат ресурсов т.к. это API):
class BrandController extends Controller
{
// [...]
public function store(SaveBrand $request)
{
$brand = Brand::create($request->all());
return new BrandResource($brand);
}
public function update(SaveBrand $request, Brand $brand)
{
$brand->update($request->all());
return new BrandResource($brand);
}
}
+
class SaveBrand extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
$rules = [
'name' => [
'required',
'max:100',
Rule::unique('brands')->ignore($this->id)
],
'url' => [
'required',
'max:100',
'url',
Rule::unique('brands')->ignore($this->id)
]
];
// Позволяет редактировать по одному полю в запросе
if ($this->method() == 'PATCH') {
foreach ($rules as $key => $item) {
array_unshift($rules[$key], 'sometimes');
}
}
return $rules;
}
}
+
class BrandResource extends JsonResource
{
public function toArray($request)
{
return parent::toArray($request);
}
}
Николай, спасибо за ответ. Это и правда кусок, который редирект на post. Соообщение не форматировано, вставлял с телефона. Ну все равно спасибо за фидбек.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.