Как сделать рефакторинг кода, чтобы уменьшить аналогичный код в laravel? - PullRequest
0 голосов
/ 14 апреля 2020

Здравствуйте, я новичок ie, я только начал создавать проект для приложения викторины. Я повторил код в своем хранилище и обновил функцию, как я могу уменьшить дублирование и написать более чистый код, любую помощь будут оценены

Спасибо Набель

Это мой метод хранения

public function store(Quiz $quiz, QuestionRequest $request)
     {  
        if($request->hasfile('image'))
        { 
            $file=$request->file('image');
            //Get File name with the extension
            $fileWithExt = $file->getClientOriginalName();
            //Get Just File Name
            $filename = pathinfo($fileWithExt,PATHINFO_FILENAME);
            //Get Just Extension
            $extension = $file->getClientOriginalExtension();
            //Filename to store
            $nameoffile = $filename.'_'.time().'.'.$extension;
            //Upload Image
            $path = $file->move(public_path('images'),$nameoffile); 
            //$path = $file->storeAs('app/img/',$nameoffile); 
            $path = $nameoffile;
        }  
        else
        {
            $path=null;
        }

     }

Это мой метод обновления

public function update(Quiz $quiz,QuestionRequest $request,Question $question)
    {  
        if(is_null($question->imgpath))
        {
            if($request->hasfile('image'))
            { 
                $file=$request->file('image');
                //Get File name with the extension
                $fileWithExt = $file->getClientOriginalName();
                //Get Just File Name
                $filename = pathinfo($fileWithExt,PATHINFO_FILENAME);
                //Get Just Extension
                $extension = $file->getClientOriginalExtension();
                //Filename to store
                $nameoffile = $filename.'_'.time().'.'.$extension;
                //Upload Image
                $path = $file->move(public_path('images'),$nameoffile); 

                $path = $nameoffile;
            }  
            else
            {
                $path=null;
            }
        }
        elseif(!empty($question->imgpath) && $request->hasfile('image'))
        {
            $file=$request->file('image');
            $fileWithExt = $file->getClientOriginalName();
            $filename = pathinfo($fileWithExt,PATHINFO_FILENAME);
            $extension = $file->getClientOriginalExtension();
            $nameoffile = $filename.'_'.time().'.'.$extension;
            $path = $file->move(public_path('images'),$nameoffile); 
            $path = $nameoffile;
        }
        else
        {
           $path=$question->imgpath;
        } 

1 Ответ

0 голосов
/ 14 апреля 2020

Вы можете создать новую черту или функцию в своем классе модели и использовать ее в своем контроллере. Вот так

В вашем Quiz.php просто создайте новую функцию с именем fileUpload()

php artisan fileUpload($data) 
    {
      $file=$data;
      //Get File name with the extension
      $fileWithExt = $file->getClientOriginalName();
      //Get Just File Name
      $filename = pathinfo($fileWithExt,PATHINFO_FILENAME);
      //Get Just Extension
      $extension = $file->getClientOriginalExtension();
      //Filename to store
      $nameoffile = $filename.'_'.time().'.'.$extension;
      //Upload Image
      $path = $file->move(public_path('images'),$nameoffile); 

      $path = $nameoffile;

      return $path;
    }

И в вашем контроллере в store() и update() вы можете просто сделать это

    if(is_null($question->imgpath))
    {
        if($request->hasfile('image'))
        {  
            $path = $quiz->fileUpload($request->file('image'));
        }  
        else
        {
            $path=null;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...