Laravel:有没有办法重用一个使用Request变量作为参数的方法?

时间:2018-03-24 15:32:10

标签: php laravel request

我想重用store

中的方法generar\productoController

public function store(Request $request){}

我希望在这个类adquisicion\ComprasController中重用它,我知道我必须导入类才能使用我想要的方法,但问题是$ request变量,我应该创建一个新的使用$request = new Request()添加我想要的数据this并将其作为参数发送?

求助的我是laravel的新手

3 个答案:

答案 0 :(得分:2)

你可以像$this->store(request(),$otherData)这样试试 使用帮助程序获取当前的请求对象

答案 1 :(得分:0)

您可以将Request数据传递给其他方法

productoController(Request $request){
     // anything here
    return redirect('your route name')->with('data', $request->all());
}

答案 2 :(得分:-1)

以下两种方法可以使方法在laravel应用程序中重用:

  1. 制作帮助方法

    Helpers文件夹中创建app文件夹,并在helper.php

    中创建所有静态方法

    <强> Helper.php

    namespace App\Helpers;
    
    class Helper {
    
        public static function store() {
            $request = request();
            // ....
        }
    
    }
    

    <强> YourController.php

    namespace App\Repositories;
    
    use App\Helpers\Helper;
    use Illuminate\Http\Request;
    
    class YourController extends Controller
    {
    
        public function store(Request $request) {
            // call the store method as
            Helper::store();
        }
    
    }
    

    这里的缺点是你会混淆所有非相关帮助方法,可能很难组织。

  2. <强>存储库

    您可以使用Repository Pattern来构建应用程序,例如,如果将foo对象存储到数据存储区,则可以先在Repositories中创建app文件夹}文件夹,并在FooRepository.php文件夹中创建Repositories

    <强> FooRepository.php

    namespace App\Repositories;
    
    class FooRepository {
    
        public function store() {
            $request = request();
            // ... 
        }
    
    }
    

    <强> YourController.php

    namespace App\Http\Controllers;
    
    use App\Repositories\FooRepository;
    use Illuminate\Http\Request;
    
    class YourController extends Controller
    {
        private $fooRepository = null;
    
        public function __construct(FooRepository $fooRepository) {
            parent::__construct();
            $this->fooRepository = $fooRepository;
        }
    
        public function store(Request $request) {
            // call the method as
            $this->fooRepository->store();
        }
    
    }