如何从外部控制器向操作添加事件侦听器?

时间:2014-02-21 22:21:11

标签: php symfony silex symfony-2.4

我有一个简单的silex应用程序,并使用了许多不同的外部控制器 我正在使用register和mount将它连接到我的应用程序。

$app->register($externalController = new ExternalController());
$app->mount('/control', $externalController );

它在其服务提供者类中添加路由login,logout等:

$controllers->get('/start', 'user.controller:loginAction')
    ->bind('control.start');

我想为它提供的操作添加一个事件或中间件监听器。

我搜索过silex和symfony文档,但我找不到一个简单的方法 我曾尝试使用$app['controllers'],但这会返回一个 ControllerCollection ,而无法更改某些内容(或者我不理解它)。

将新侦听器添加到现有非自编写控制器的推荐方法是什么?

1 个答案:

答案 0 :(得分:1)

我在此期间找到了一种可能的方法来刷新控制器以创建 RouteCollection 并通过绑定名称检索它。
您将收到一个 Route 实例,并可以在那里使用正常的中间件监听器方法,如beforeafter等。

$app->flush();
$route = $app['routes']->get('control.start');
$route->before(function(Symfony\Component\HttpFoundation\Request $request) use ($app) {
    throw new RuntimeException('You should see me.');
});