2012-02-29 20 views
16

Obecnie piszę narzędzie do biuletynu i dlatego muszę generować bezwzględne adresy URL w skrypcie CLI, który jest wywoływany przez crona.Symfony2: jak ustawić adres URL hosta/bazy w skryptach CLI

Niestety, polecenie Symfony CLI nie wie nic o moim hoście/parametrze base_url, więc router generuje bezwzględne adresy URL z nieprawidłowym adresem base_url. Zawsze używa http://localhost jako podstawy.

Czy istnieje sposób przekazania routerowi poprawnego adresu base_url?

Mój kod:

$this->container->get('router')->generate($route, $parameters, true); 

Odpowiedz

26

Można to zrobić w ten sposób:

$host = $this->getContainer()->getParameter('host'); 
$this->getContainer()->get('router')->getContext()->setHost($host); 

Podobnie można ustawić baseURL i schematu:

$this->getContainer()->get('router')->getContext()->setScheme('https'); 
$this->getContainer()->get('router')->getContext()->setBaseUrl('/web'); 
+0

działa jak powinno. dzięki :) – stoefln

+0

Też potrzebowałem tej funkcjonalności i jak to jest prawdopodobnie potrzebne w wielu serwisach, w których utworzyłem pakiet: http://packagist.org/packages/frosas/base-url-bundle –

+3

Możesz skonfigurować to globalnie w '' 'parameters.yml'''. Będzie on brany pod uwagę tylko w przypadku żądań innych niż internetowe, więc nie musisz się martwić o to, że twoje "rzeczywiste" trasy będą na to wpływać. Odnośnik: [Konfigurowanie kontekstu żądania globalnie] (http://symfony.com/doc/2.3/cookbook/console/sending_emails.html#configuring-the-request-context-globally). – flu

1

$host = $this->container->getParameter('host'); $this->container->get('router')->getContext()->setHost($host);

13

Rejestracja 2.1 możesz skonfigurować domyślne parametry routera, co jest prawdopodobnie najlepszym rozwiązaniem. Skrypt CLI użyje tych parametrów domyślnych, jednak żądania internetowa będzie je zastąpić:

# app/config/parameters.yml 
parameters: 
    router.request_context.host: example.org 
    router.request_context.scheme: https 
    router.request_context.base_url: my/path 

Aby uzyskać więcej informacji, zobacz How to Generate URLs and Send Emails from the Console

+1

To nie wydaje się działać w Symfony 3 dla mnie. Czy mógłbyś wiedzieć, czy ma działać w SF3, proszę? – conradkdotcom

+0

W rzeczywistości to działa w SF3, ale nie jest to app/config/parameters.yml, ale app/config/services.yml – LedZelkin