*
* @author Fabien Potencier <fabien@symfony.com>
*/
-class TraceableControllerResolver implements ControllerResolverInterface
+class TraceableControllerResolver implements ControllerResolverInterface, ArgumentResolverInterface
{
private $resolver;
private $stopwatch;
+ private $argumentResolver;
/**
* Constructor.
*
- * @param ControllerResolverInterface $resolver A ControllerResolverInterface instance
- * @param Stopwatch $stopwatch A Stopwatch instance
+ * @param ControllerResolverInterface $resolver A ControllerResolverInterface instance
+ * @param Stopwatch $stopwatch A Stopwatch instance
+ * @param ArgumentResolverInterface $argumentResolver Only required for BC
*/
- public function __construct(ControllerResolverInterface $resolver, Stopwatch $stopwatch)
+ public function __construct(ControllerResolverInterface $resolver, Stopwatch $stopwatch, ArgumentResolverInterface $argumentResolver = null)
{
$this->resolver = $resolver;
$this->stopwatch = $stopwatch;
+ $this->argumentResolver = $argumentResolver;
+
+ // BC
+ if (null === $this->argumentResolver) {
+ $this->argumentResolver = $resolver;
+ }
+
+ if (!$this->argumentResolver instanceof TraceableArgumentResolver) {
+ $this->argumentResolver = new TraceableArgumentResolver($this->argumentResolver, $this->stopwatch);
+ }
}
/**
/**
* {@inheritdoc}
+ *
+ * @deprecated This method is deprecated as of 3.1 and will be removed in 4.0.
*/
public function getArguments(Request $request, $controller)
{
- $e = $this->stopwatch->start('controller.get_arguments');
+ @trigger_error(sprintf('The %s method is deprecated as of 3.1 and will be removed in 4.0. Please use the %s instead.', __METHOD__, TraceableArgumentResolver::class), E_USER_DEPRECATED);
- $ret = $this->resolver->getArguments($request, $controller);
-
- $e->stop();
+ $ret = $this->argumentResolver->getArguments($request, $controller);
return $ret;
}