Файл: onlinepoisk.wm-scripts.ru/vendor/silex/silex/silex/src/Silex/ServiceControllerResolver.php
Строк: 83
<?php
/*
* This file is part of the Silex framework.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Silex;
use SilexApplication;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpKernelControllerControllerResolverInterface;
/**
* Enables name_of_service:method_name syntax for declaring controllers.
*
* @link http://silex.sensiolabs.org/doc/cookbook/controllers_as_services.html
*/
class ServiceControllerResolver implements ControllerResolverInterface
{
const SERVICE_PATTERN = "/[A-Za-z0-9._-]+:[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*/";
protected $resolver;
protected $app;
/**
* Constructor.
*
* @param ControllerResolverInterface $resolver A ControllerResolverInterface instance to delegate to
* @param Application $app An Application instance
*/
public function __construct(ControllerResolverInterface $resolver, Application $app)
{
$this->resolver = $resolver;
$this->app = $app;
}
/**
* {@inheritdoc}
*/
public function getController(Request $request)
{
$controller = $request->attributes->get('_controller', null);
if (!is_string($controller) || !preg_match(static::SERVICE_PATTERN, $controller)) {
return $this->resolver->getController($request);
}
list($service, $method) = explode(':', $controller, 2);
if (!isset($this->app[$service])) {
throw new InvalidArgumentException(sprintf('Service "%s" does not exist.', $service));
}
return array($this->app[$service], $method);
}
/**
* {@inheritdoc}
*/
public function getArguments(Request $request, $controller)
{
return $this->resolver->getArguments($request, $controller);
}
}