Как генерировать URL из консоли
Дата обновления перевода 2023-07-20
Как генерировать URL из консоли
К сожалению, контекст командной строки не знает о вашем VirtualHost или
имени домена. Это означает, что если вы генерируете абсолютный URL в консольной
команде, то вы скорее всего получите что-то вроде http://localhost/foo/bar
,
что не очень полезно.
Чтобы исправить это, вам нужно сконфигурировать "контекст запроса", то есть, простыми словами - сконфигурировать ваше окружение так, чтобы оно знало, какой URL ему использовать при генерировании URL.
Существует два способа конфигурации контекста запроса: на уровне приложения и по-командно.
Глобальная конфигурация контекста запроса
Чтобы сконфигурировать контекст запроса, который используется генератором URL, вы
можете переопределить параметры, которые он использует как значения по умолчанию,
чтобы изменить хост (localhost
) и схему (http
) по умолчанию. Вы также можете
сконфигурировать базовый путь, если Symfony работает не в корневом каталоге.
Отметьте, что это не влияет на URL, сгенерированные через обычные веб-запросы, так как они будут переопределены по умолчанию.
1 2 3 4 5
# config/services.yaml
parameters:
router.request_context.host: example.org
router.request_context.scheme: https
router.request_context.base_url: my/path
Конфигурация контекста запроса по-командно
Чтобы изменить это только в одной команде, вы можете просто вызвать контекст запроса из сервиса маршрутизатора и переопределить его настройки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
// src/Command/DemoCommand.php
use Symfony\Component\Routing\RouterInterface;
// ...
class DemoCommand extends ContainerAwareCommand
{
private $router;
public function __construct(RouterInterface $router)
{
$this->router = $router;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$context = $this->router->getContext();
$context->setHost('example.com');
$context->setScheme('https');
$context->setBaseUrl('my/path');
$url = $this->router->generate('route-name', array('param-name' => 'param-value'));
// ...
}
}