diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 4a8fef38d3093..833004e4e8db7 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -419,7 +419,25 @@ private function addRequestSection(ArrayNodeDefinition $rootNode) ->info('request configuration') ->canBeEnabled() ->fixXmlConfig('format') + ->beforeNormalization() + ->ifTrue(function ($v) { return is_array($v) && !isset($v['base_url']); }) + ->then(function (array $v) { + $v['base_url'] = isset($v['base_path']) ? $v['base_path'] : null; + + return $v; + }) + ->end() ->children() + ->scalarNode('scheme')->defaultValue('http')->end() + ->scalarNode('host')->defaultValue('localhost')->end() + ->scalarNode('base_url') + ->beforeNormalization()->ifString()->then(function ($v) { return '/'.trim($v, '/'); })->end() + ->defaultValue('/') + ->end() + ->scalarNode('base_path') + ->beforeNormalization()->ifString()->then(function ($v) { return '/'.trim($v, '/'); })->end() + ->defaultValue('/') + ->end() ->arrayNode('formats') ->useAttributeAsKey('name') ->prototype('array') diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 3f3c294057f63..95dc50e3ddeb9 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -26,6 +26,7 @@ use Symfony\Component\Config\Resource\FileResource; use Symfony\Component\Config\Resource\DirectoryResource; use Symfony\Component\Finder\Finder; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\DependencyInjection\Extension; use Symfony\Component\Config\FileLocator; use Symfony\Component\PropertyAccess\PropertyAccessor; @@ -138,6 +139,7 @@ public function load(array $configs, ContainerBuilder $container) $this->registerSessionConfiguration($config['session'], $container, $loader); } + $container->setParameter('request', $config['request']); if ($this->isConfigEnabled($container, $config['request'])) { $this->registerRequestConfiguration($config['request'], $container, $loader); } diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php index 979f485004294..1290d16b2f016 100644 --- a/src/Symfony/Component/HttpFoundation/Request.php +++ b/src/Symfony/Component/HttpFoundation/Request.php @@ -1792,6 +1792,10 @@ protected function prepareRequestUri() */ protected function prepareBaseUrl() { + if ($this->server->has('SF_BASE_URL')) { + return $this->server->get('SF_BASE_URL'); + } + $filename = basename($this->server->get('SCRIPT_FILENAME')); if (basename($this->server->get('SCRIPT_NAME')) === $filename) { @@ -1858,6 +1862,10 @@ protected function prepareBaseUrl() */ protected function prepareBasePath() { + if ($this->server->has('SF_BASE_PATH')) { + return $this->server->get('SF_BASE_PATH'); + } + $filename = basename($this->server->get('SCRIPT_FILENAME')); $baseUrl = $this->getBaseUrl(); if (empty($baseUrl)) { diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index b7b7d81b61980..a6918d4eb222f 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -120,6 +120,17 @@ public function boot() $bundle->boot(); } + // initialize request on CLI + if ('cli' === PHP_SAPI && $this->container->hasParameter('request')) { + $config = $this->container->getParameter('request'); + $request = Request::create($config['scheme'].'://'.$config['host'].$config['base_url']); + $request->server->set('REQUEST_URI', $config['base_url']); + $request->server->set('SF_BASE_URL', $config['base_url']); + $request->server->set('SF_BASE_PATH', $config['base_path']); + + $this->container->get('request_stack')->push($request); + } + $this->booted = true; }