2012-02-29 12 views
16

Attualmente sto scrivendo uno strumento di newsletter, e quindi devo generare URL assoluti in uno script CLI che viene chiamato tramite cron.Symfony2: come impostare l'url host/base negli script CLI

Sfortunatamente il comando CLI di Symfony non sa nulla del mio host/base_url, quindi il router genera URL assoluti con un valore base_url errato. Utilizza sempre http://localhost come base.

C'è un modo per dire al router il corretto base_url?

Il mio codice:

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

risposta

26

si può fare in questo modo:

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

Allo stesso modo è possibile impostare baseurl e schema:

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

funziona come dovrebbe. grazie :) – stoefln

+0

Avevo bisogno anche di questa funzionalità e poichè probabilmente è necessaria in molti siti ho creato un pacchetto: http://packagist.org/packages/frosas/base-url-bundle –

+3

È possibile configurare questo globalmente nel '' 'parameters.yml'''. Verrà preso solo per richieste non web, quindi non è necessario preoccuparsi che le tue "vere" rotte siano influenzate da questo. Riferimento: [Configurazione globale del contesto di richiesta] (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

Dal 2.1 è possibile configurare i parametri predefiniti del router, che è probabilmente l'approccio migliore. Uno script CLI userà questi parametri predefiniti, ma una richiesta Web di loro avrà la precedenza:

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

Per ulteriori dettagli, vedere How to Generate URLs and Send Emails from the Console

+1

Questo non sembra funzionare in Symfony 3 per me. Vuoi sapere se dovrebbe funzionare in SF3, per favore? – conradkdotcom

+0

In effetti questo funziona in SF3 ma non è app/config/parameters.yml ma app/config/services.yml – LedZelkin

Problemi correlati