如何在 Laravel 的其他控制器中使用相同的控制器功能?

我有这样的功能,我通过 API 使用它并发送请求对象。


public function test(Request $request){

   //code

}

现在我想在另一个函数中使用相同的函数,如下所示


public function test2(){

   $id = 2;

   $this->test($id);

}

但在上面我需要传递一个 id。


但第一个函数需要请求实例的参数类型。如何做呢?我无法添加第二个参数。


30秒到达战场
浏览 146回答 4
4回答

HUWWW

如果由于某种原因不允许您编辑方法代码,您可以执行以下操作:创建一个新Request实例。id使用值向其添加属性。调用你的方法。该类Illuminate\Http\Request有一个capture()如下所示的方法:/**&nbsp;* Create a new Illuminate HTTP request from server variables.&nbsp;*&nbsp;* @return static&nbsp;*/public static function capture(){&nbsp; &nbsp; static::enableHttpMethodParameterOverride();&nbsp; &nbsp; return static::createFromBase(SymfonyRequest::createFromGlobals());}在您的代码中,您将执行以下操作:<?phpuse Illuminate\Http\Request;class xyz{&nbsp; &nbsp; public function test(Request $request){&nbsp; &nbsp; &nbsp; &nbsp;//code&nbsp; &nbsp; }&nbsp; &nbsp; public function test2(){&nbsp; &nbsp; &nbsp; &nbsp;$request = Request::capture();&nbsp; &nbsp; &nbsp; &nbsp;$request->initialize(['id' => 2]);&nbsp; &nbsp; &nbsp; &nbsp;$this->test($request);&nbsp; &nbsp; }}

墨色风雨

您应该将代码导出到另一个函数中,然后在每个控制器中使用 Trait。因此,您将可以在两个不同的类中访问相同的函数。通过这样做,您可以提供所需的任何参数,甚至可以设置默认值,而无需调用控制器函数本身。

繁星淼淼

您可以而且应该使用服务在多个控制器之间组织共享代码。基本上创建类<?phpnamespace App\Services;class TestService{&nbsp; &nbsp; public function testFunction($id)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; // add your logic hear&nbsp; &nbsp; &nbsp; &nbsp; return 'executed';&nbsp; &nbsp; }}并在您的控制器中注入此服务并调用函数 testFunction() ,如下所示:<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use App\Services\TestService;class TestController{&nbsp;&nbsp; &nbsp; protected $testService;&nbsp; &nbsp; public function __construct(TestService $testService)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $this->testService = $testService;&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; public function test(Request $request){&nbsp; &nbsp; &nbsp; &nbsp; // handle validation, get id&nbsp; &nbsp; &nbsp; &nbsp; $this->testService->testFunction($id);&nbsp; &nbsp; &nbsp; &nbsp; // return response from controller (json, view)&nbsp; &nbsp; }

动漫人物

最佳实践是在控制器中(或在单独的类中,根据您的喜好)创建由两个函数调用的第三个私有方法:class TestController extends Controller {&nbsp; public function test(Request $request){&nbsp; &nbsp;$id = $request->get('id', 0); // Extract the id from the request&nbsp; &nbsp;&nbsp; &nbsp;$this->doStuffWithId($id);&nbsp; }&nbsp; public function test2(){&nbsp; &nbsp;$id = 2;&nbsp; &nbsp;&nbsp; &nbsp;$this->doStuffWithId($id);&nbsp; }&nbsp; private function doStuffWithId($id) {&nbsp; &nbsp; // code&nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP