2011-07-27 17 views
67

sto facendo il passaggio da CodeIgniter al Symfony 2. Qualcuno può per favore mi dia un esempio di come:Ottenere l'URL di base del sito web e globalmente passarlo a ramoscello in Symfony 2

  • Get l'url di base (l'url senza le parti specifiche del percorso)
  • Passa globalmente questa variabile al bundle di ramoscello in modo che possa essere utilizzata in ogni modello.
+0

possibile duplicato del [dinamicamente l'impostazione della baseurl all'interno di configurazione in Symfony2] (http://stackoverflow.com/questions/6381809/dynamically-setting-the-baseurl-within-configuration-in-symfony2) –

risposta

69

Perché è necessario ottenere questo URL di root? Non puoi generare direttamente URL assoluti?

{{ url('_demo_hello', { 'name': 'Thomas' }) }} 

Questo codice Twig genererà l'intero URL http: // nella route _demo_hello.

Infatti, ricevendo l'URL di base del sito web sta ottenendo solo l'URL completo del percorso homepage:

{{ url('homepage') }} 

(homepage, o come si chiamano nel file di routing).

+0

Grazie mille, ho pensato che fosse la strada da percorrere, ma sapevo solo della funzione {{path (..)}}, che porta a sbagliare risultati. {{url}} è proprio ciò di cui avevo bisogno. – geoffreydv

+0

cosa succede se sto riproducendo il ramoscello dal comando console di symfony, diciamo per generare un modello di email, ho bisogno dell'URL di base. Come faccio in quel caso. – vishal

+1

C'è un libro di cucina per questo: http://symfony.com/doc/master/cookbook/console/sending_emails.html – Damien

1

Invece di passare la variabile al modello globalmente, è possibile definire un modello di base e renderizzare la "parte globale" in esso. Il modello base può essere ereditato.

Esempio di rendere modello dal disco della documentazione di symfony:

<div id="sidebar"> 
    {% render "AcmeArticleBundle:Article:recentArticles" with {'max': 3} %} 
</div> 
30

URL di base è definito all'interno Symfony\Component\Routing\RequestContext.

Può essere prelevato da regolatore in questo modo:

$this->container->get('router')->getContext()->getBaseUrl() 
114

Questo è ora disponibile gratuitamente in modelli ramoscello (testato su versione SF2 2.0.14)

{{ app.request.getBaseURL() }} 

Nelle versioni successive Symfony (testato su 2.5), provare:

{{ app.request.getSchemeAndHttpHost() }} 
+30

Questo può anche essere abbreviato in '{{app.request.baseUrl}}' (localizzerà il metodo getter e lo chiamerà automaticamente) –

+2

@Colin O'Dell inoltre, è ancora più appropriato NON USARE le chiamate al metodo in vista - la vista non dovrebbe sapere quali sono i metodi nell'oggetto. Anche se sembra leggermente diverso in symfony, ma +10 per quella risposta comunque. – thorinkor

+1

Se non sto usando * twig *, come posso riscriverlo in * PHP *? – Nis

44

È possibile utilizzare il nuovo metodo di richiesta.210:

{{ app.request.getSchemeAndHttpHost() }} 
+1

Questa funzione è stata introdotta in Symfony 2.1 – COil

14
<base href="{{ app.request.getSchemeAndHttpHost() }}"/> 

o dal regolatore

$this->container->get('router')->getContext()->getSchemeAndHttpHost() 
14

Per Symfony 2.3 e versioni successive, per ottenere l'URL di base in un controller dovrebbe essere

$this->get('request')->getSchemeAndHttpHost(); 
+0

'$ this-> container-> get ('request') -> getSchemeAndHttpHost()' –

16

Se si desidera l'URL di base di un'applicazione Symfony, dovresti usare getSchemeAndHttpHost() concatenato insieme a getBaseUrl(), simile a come funziona getUri(), tranne che senza il percorso del router e la stringa di query.

{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }} 

Ad esempio, se l'URL del sito web Symfony vive a https://www.stackoverflow.com/app1/, quindi questi due metodi restituire questi valori:

getSchemeAndHttpHost

https://www.stackoverflow.com 

getBaseURL

/app1 

Nota: getBaseUrl() include il nome file dello script (ad esempio /app.php) se è nell'URL.

2

anche js/css/immagine per gli URL non c'è a portata di mano funzione asset()

<img src="{{ asset('image/logo.png') }}"/> 
Problemi correlati