Получив совет, я начал работать с классом / методом / концепцией Laravel FormRequest
https://laravel.com/docs/5.8/validation#form-request-validation
Я очистил свой код, и теперь моя функция обновления теперь «одна строка»', как вы могли видеть, это был беспорядок раньше.Результат:
public function update(UpdateUserRequest $request)
{
user()->update($request->all());
// user() helper function short for Auth::user()
}
Маленькое объяснение.Мой $ request - это не класс Request, а класс UpdateUserRequest:
update(UpdateUserRequest $request)
'php artisan make:request UpdateUserRequest'
Этот класс имеет функцию с именем
public function withValidator($validator)
Эта функция вызывается при выполнении запроса, поэтому перед нимвходит в логику контроллера, в этом классе я проверяю данные и переназначаю значения $ request, как я делал раньше.
Конечный результат:
public function withValidator()
{
$post = (object) $this->all();
// Update password if possible
$this->preparePassword($post);
// Update mail
$this->prepareMail($post);
// Update availability
$this->prepareAvailability($post);
//
$this->prepareZip($post);
//
$this->prepareSofttags($post);
$this->merge((array) $post);
}
Все вызываемые функции являются частными функциями внутри этого класса.Поэтому я переместил приватную функцию из контроллера сюда, чтобы мой контроллер снова стал чистым.
Я собираюсь изменить немного больше в этой базе кода, потому что сейчас я вставляю все данные запроса в каждую приватную функцию,но лучше просто вставить данные, которые я хочу проверить, и изменить $ request (в данном случае $ this) сразу после проверки.Так что, в конце концов, у меня нет слияния.
PS Мой английский не очень хорош, поэтому, если у меня есть какие-то опечатки или я не совсем понимаю, о чем говорю, пожалуйста, спросите меня об этом.
PSS Если вы видите что-нибудь, что я могу улучшить, не сдерживайтесь и скажите мне:)
Спасибо всем за совет!