是否可以在不创建ControllerResolver
课程的情况下执行此操作?我希望RootController
和AuthController
扩展Controller
。我已经在每个代码中都有代码... extends Controller
但是Silex没有提取它。
我也试过但没有工作:
$app['controller.root'] = $app->share($app->extend('controller.base', function() use ($app) {
........
// Register Controllers
$app['controller.base'] = $app->share(function() use ($app) {
return new Controller(
$app['twig'],
$app['session'],
$app['form.factory'],
$app['url_generator']);
});
$app['controller.root'] = $app->share(function() use ($app) {
return new RootController(
$app['service.user']);
}));
$app['controller.auth'] = $app->share(function() use ($app) {
return new AuthController(
$app['service.google'],
$app['service.user'],
$app['service.meetup']);
});
我可以在每个子控制器中尝试parant::__construct($dependencies......)
,但我认为这将开始看起来很混乱。
答案 0 :(得分:0)
您无法使用构造函数进行扩展,但如果您有可用的setter,则可以尝试:
$app['controller.base'] = $app->share($app->extend('controller.base', function($controller) use ($app) {
$controller->setUser($app['service.user']);
return $controller;
});
小心,您的例子有逻辑问题,如果您扩展服务,它应该具有相同的名称'controller.base'
,而不是像'controller.root'
那样的新名称。