@Div-Man

Как лучше сократить метод, контроллера что бы его легче было тестировать?

Сейчас вот такой жирный метод

public function store(Request $request)
    {
       $rules = [
           'description' => 'min:4',
           'image' => 'required|image|mimes:jpg,jpeg,png',
           'choose-category' => 'array|required'
           ];
    
        $messages = [
            'description.min' => 'Название должно содержать минимум :min символа.',
            'image.required' => 'Изображение загружать обязательно.',
            'image.image' => 'Вы загрузили не изображение.',
            'image.mimes' => 'Допустимые форматы: jpg, jpeg, png.',
            'choose-category.required' => 'Выберите категорию'
         ];
    
        Validator::make(
            $request->all(), 
            $rules ,
            $messages
              )->validate(); 
     
      $image = $request->file('image');
      
      $description = $request->input('description');
      
      $this->imageClass->add($image, $description);
  
      $this->imageClass->save();

      $idNewImage = $this->imageClass->id;
      $categories = $request->input('choose-category');
      
      $relation = \App\Services\Image::find($idNewImage);
        
      $relation->categories()->attach($categories);
      
      return redirect('/');
    }


Валидацию вынести в модель и протестировать только прошла ли она успешно или нет?
Например, в контроллере будет

$validation = this->imageClass->validation($request->all());


А как быть с остальным кодом, его так и оставить?
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 3
fomvasss
@fomvasss
PHP developer
https://laravel.ru/posts/864 - не прямой ответ на ваш вопрос, но хорошая статья не эту тему
Ответ написан
Комментировать
@Yadalay
Php, Mysql, Html, Css, Js/Jquery/Ajax, Laravel
Валидацию выносить в отдельный request - https://laravel.com/docs/5.7/validation#creating-f...
Ответ написан
Комментировать
@jazzus
Да-да валидация в отдельных файлах очень удобна
php artisan make:request FileRequest
и туда перенести правила и сообщения, а в контроллере подключить его через use и использовать в методе (FileRequest $request). Остальной код супер)) Можно еще добавить проверок переменных например if($relation)... и т.д. для исключения ошибок, добавить также права доступа к методу ну и конечно подключить выгрузку json для js
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы