@Dos771

Как лучше написать код в Controller в Laravel?

Добрый день. Прошу помочь начинающему Laravel прогеру )
Ребят как мне написать это код лучше, у меня просто два раз повторяется один тот же код, только значение name в Controller меняется. На данный момент код работает, только это говнокод )) Заранее спасибо

public function create(Request $request)
{
    $this->validate($request, [
        'pasport' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        'certificate' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
    ]);


    $filenameWithExt = $request->file('pasport')->getClientOriginalName();
    $filenameWithExtTwo = $request->file('certificate')->getClientOriginalName();


    $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
    $filenameTwo = pathinfo($filenameWithExtTwo, PATHINFO_FILENAME);

    $extension = $request->file('pasport')->getClientOriginalExtension();
    $extensionTwo = $request->file('certificate')->getClientOriginalExtension();

    $fileNameToStore = $filename . '_'.time(). '.' . $extension;
    $fileNameToStoreTwo = $filenameTwo . '_'.time(). '.' . $filenameWithExtTwo;

    $path = $request->file('pasport')->storeAs('public/images', $fileNameToStore);
    $pathTwo = $request->file('certificate')->storeAs('public/images', $fileNameToStoreTwo);


    $post = new Check();
    $post->user_id = auth()->user()->id;
    $post->pasport = $fileNameToStore;
    $post->certificate = $fileNameToStoreTwo;
    $post->save();

    return redirect('/sendpalate')->with('success', 'Ваши данные успешно отправлены');

}
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 3
@hakkol
1) Вынесите валидацию в отдельный реквест
2) Создайте хелпер, в котором будет метод по сохранению картинки
3) Вызывайте в контроллере метод хелпера и передавайте туда файл ($request->file('pasport') или $request->file('certificate'))
Ответ написан
@asd111
Говнокод это когда ничего не понятно в написанном, как в битрикс например. У тебя здесь всё понятно, не парься.
Ответ написан
@aleksejjjj
1. Метод для сохранения обычно называется store, create только отдает view с формой для создания.
2. Повторяющийся код вынести в отдельный метод или при необходимости в отдельный файл. Пример с отдельным методом:
public function store ()
{
    $this->saveImage ($request->file('pasport'));
    $this->saveImage ($request->file('certificate'));
}

protected function saveImage ($file)
{
    $filenameWithExt = $file->getClientOriginalName();
 
    $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
  
    $extension = $file->getClientOriginalExtension();
   
    $fileNameToStore = $filename . '_'.time(). '.' . $extension;
   
    $path = $file->storeAs('public/images', $fileNameToStore);
}
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Zaymigo Нижний Новгород
от 20 000 до 100 000 руб.
Devmasterz Тюмень
от 80 000 до 120 000 руб.
18 июля 2018, в 23:01
5000 руб./за проект
18 июля 2018, в 22:20
4000 руб./за проект