为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
30秒到达战场 2023-10-21 10:07:27
我有这样的功能,我通过 API 使用它并发送请求对象。public function test(Request $request){   //code}现在我想在另一个函数中使用相同的函数,如下所示public function test2(){   $id = 2;   $this->test($id);}但在上面我需要传递一个 id。但第一个函数需要请求实例的参数类型。如何做呢?我无法添加第二个参数。
查看完整描述

4 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

如果由于某种原因不允许您编辑方法代码,您可以执行以下操作:

  • 创建一个新Request实例。

  • id使用值向其添加属性。

  • 调用你的方法。

该类Illuminate\Http\Request有一个capture()如下所示的方法:

/**

 * Create a new Illuminate HTTP request from server variables.

 *

 * @return static

 */

public static function capture()

{

    static::enableHttpMethodParameterOverride();


    return static::createFromBase(SymfonyRequest::createFromGlobals());

}

在您的代码中,您将执行以下操作:


<?php


use Illuminate\Http\Request;


class xyz{


    public function test(Request $request){

       //code

    }


    public function test2(){

       $request = Request::capture();

       $request->initialize(['id' => 2]);

       $this->test($request);

    }

}


查看完整回答
反对 回复 2023-10-21
?
墨色风雨

TA贡献1853条经验 获得超6个赞

您应该将代码导出到另一个函数中,然后在每个控制器中使用 Trait。因此,您将可以在两个不同的类中访问相同的函数。

通过这样做,您可以提供所需的任何参数,甚至可以设置默认值,而无需调用控制器函数本身。


查看完整回答
反对 回复 2023-10-21
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

您可以而且应该使用服务在多个控制器之间组织共享代码。基本上创建类


<?php


namespace App\Services;


class TestService

{


    public function testFunction($id)

    {

        // add your logic hear

        return 'executed';

    }

}

并在您的控制器中注入此服务并调用函数 testFunction() ,如下所示:


<?php


namespace App\Http\Controllers;


use Illuminate\Http\Request;

use App\Services\TestService;


class TestController

    protected $testService;


    public function __construct(TestService $testService)

    {

        $this->testService = $testService;

    }

    

    public function test(Request $request){

        // handle validation, get id

        $this->testService->testFunction($id);

        // return response from controller (json, view)

    }


查看完整回答
反对 回复 2023-10-21
?
动漫人物

TA贡献1815条经验 获得超10个赞

最佳实践是在控制器中(或在单独的类中,根据您的喜好)创建由两个函数调用的第三个私有方法:


class TestController extends Controller {

  public function test(Request $request){

   $id = $request->get('id', 0); // Extract the id from the request

   

   $this->doStuffWithId($id);

  }


  public function test2(){

   $id = 2;

   

   $this->doStuffWithId($id);

  }


  private function doStuffWithId($id) {

    // code

  }

}


查看完整回答
反对 回复 2023-10-21
  • 4 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信