Как генерировать URL из консоли

Как генерировать URL из консоли

К сожалению, контекст командной строки не знает о вашем VirtualHost или имени домена. Это означает, что если вы генерируете абсолютный URL в консольной команде, то вы скорее всего получите что-то вроде http://localhost/foo/bar, что не очень полезно.

Чтобы исправить это, вам нужно сконфигурировать "контекст запроса", то есть, простыми словами - сконфигурировать ваше окружение так, чтобы оно знало, какой URL ему использовать при генерировании URL.

Существует два способа конфигурации контекста запроса: на уровне приложения и по-командно.

Глобальная конфигурация контекста запроса

Чтобы сконфигурировать контекст запроса, который используется генератором URL, вы можете переопределить параметры, которые он использует как значения по умолчанию, чтобы изменить хост (localhost) и схему (http) по умолчанию. Вы также можете сконфигурировать базовый путь, если Symfony работает не в корневом каталоге.

Отметьте, что это не влияет на URL, сгенерированные через обычные веб-запросы, так как они будут переопределены по умолчанию.

  • YAML
    1
    2
    3
    4
    5
    # app/config/parameters.yml
    parameters:
        router.request_context.host: example.org
        router.request_context.scheme: https
        router.request_context.base_url: my/path
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    <!-- app/config/parameters.xml -->
    <?xml version="1.0" encoding="UTF-8"?>
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
        <parameters>
            <parameter key="router.request_context.host">example.org</parameter>
            <parameter key="router.request_context.scheme">https</parameter>
            <parameter key="router.request_context.base_url">my/path</parameter>
        </parameters>
    
    </container>
    
  • PHP
    1
    2
    3
    4
    // app/config/parameters.php
    $container->setParameter('router.request_context.host', 'example.org');
    $container->setParameter('router.request_context.scheme', 'https');
    $container->setParameter('router.request_context.base_url', 'my/path');
    

Конфигурация контекста запроса по-командно

Чтобы изменить это только в одной команде, вы можете просто вызвать контекст запроса из сервиса router и переопределить его настройки:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// src/AppBundle/Command/DemoCommand.php

// ...
class DemoCommand extends ContainerAwareCommand
{
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $context = $this->getContainer()->get('router')->getContext();
        $context->setHost('example.com');
        $context->setScheme('https');
        $context->setBaseUrl('my/path');

        // ... your code here
    }
}

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.