4 回答

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);
}
}

TA貢獻1853條經驗 獲得超6個贊
您應該將代碼導出到另一個函數中,然后在每個控制器中使用 Trait。因此,您將可以在兩個不同的類中訪問相同的函數。
通過這樣做,您可以提供所需的任何參數,甚至可以設置默認值,而無需調用控制器函數本身。

TA貢獻1775條經驗 獲得超11個贊
您可以而且應該使用服務在多個控制器之間組織共享代碼?;旧蟿摻?/p>
<?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)
}

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
}
}
- 4 回答
- 0 關注
- 210 瀏覽
添加回答
舉報