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个赞
您可以而且应该使用服务在多个控制器之间组织共享代码。基本上创建类
<?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 关注
- 145 浏览
添加回答
举报