Php Slim 3-如何在不传递参数的情况下调用方法

Php Slim 3-如何在不传递参数的情况下调用方法,php,dependency-injection,slim,Php,Dependency Injection,Slim,我使用纤细的桥梁为DI 比如说,我想从AController调用BController中的函数'second' namespace App\Controllers; use Psr\Http\Message\RequestInterface as Request; use Psr\Http\Message\ResponseInterface as Response; use Noodlehaus\Config as Config; class BController extends Cont

我使用纤细的桥梁为DI

比如说,我想从AController调用BController中的函数'second'

namespace App\Controllers;

use Psr\Http\Message\RequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Noodlehaus\Config as Config;

class BController extends Controllers {

public function second(Request $request, Response $response, Config $config, $optional = []){
    // do stuff
}
我如何调用第二个函数,只传递我想要发送的参数(在本例中是可选的),而不传递所有其他依赖项,如请求或响应

class AController extends Controllers{
    public function second(Request $request, Response $response, BController $bController){
        $bController->second(['custom parameter']);

        // or

        $this->container->get('App/Controllers/BCOntroller')->second();

        // i do not want this

        $bController->second($request, $response, $cache, etc etc);
    }
}
我试图遵循路由逻辑。执行“first”函数时不发送参数

$app->get('/', ['\App\Controllers\AController', 'first']);

您的问题间接地暗示
App/Controllers/BController::second()
包含一段应用程序逻辑(否则,您为什么要在不传递请求/响应对的情况下调用它?)。如果是这种情况,那么您将面临违反单一责任原则的问题——每个组件只应做一件事。任何控制器的任务都是处理请求和返回响应。这就是为什么@Rob问你一个关于
App/Controllers/BController::second()
的问题

由于您希望在调用
AController::second()
方法时执行相同的逻辑,因此最好的解决方案是将应用程序逻辑从
App\Controllers\BController::second()
提取到一个单独的服务,并在任何需要的地方调用它

然后在必要时从控制器内部注入服务


至于您问题的确切答案-不,您不能调用该方法,因为方法签名需要
$request
$response
参数。

您需要第二个控制器提供什么功能?显然是第二个功能?显然是。祝你好运。这个问题本身与第二个函数的功能无关。谢谢你