Sto facendo il passaggio da CodeIgniter a Symfony 2. Qualcuno può darmi un esempio di come:
- Ottieni l'URL di base (l'URL senza le parti specifiche del percorso)
- Passa globalmente questa variabile al bundle twig così posso usarla in ogni template.
Sto facendo il passaggio da CodeIgniter a Symfony 2. Qualcuno può darmi un esempio di come:
Risposte:
Perché hai bisogno di ottenere questo URL di root? Non puoi generare direttamente URL assoluti?
{{ url('_demo_hello', { 'name': 'Thomas' }) }}
Questo codice Twig genererà l'http: // url completo alla rotta _demo_hello.
In effetti, ottenere l'URL di base del sito Web significa ottenere solo l'URL completo del percorso della home page:
{{ url('homepage') }}
( homepage , o qualunque cosa tu chiami nel tuo file di routing).
Questo è ora disponibile gratuitamente nei modelli twig (testato su sf2 versione 2.0.14)
{{ app.request.getBaseURL() }}
Nelle versioni successive di Symfony (testate sulla 2.5), prova:
{{ app.request.getSchemeAndHttpHost() }}
{{ app.request.baseUrl }}
(individuerà il metodo getter e lo chiamerà automaticamente)
{{ app.request.getSchemeAndHttpHost() }}
funziona!
Puoi utilizzare il nuovo metodo di richiesta getSchemeAndHttpHost()
:
{{ app.request.getSchemeAndHttpHost() }}
Valido da Symfony v2.1 a v4.1 +
Se vuoi l'URL di base per un'applicazione Symfony, dovresti usare getSchemeAndHttpHost()
concatenato insieme a getBaseUrl()
, in modo simile a come getUri()
funziona, tranne senza il percorso del router e la stringa di query.
{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }}
Ad esempio, se l'URL del tuo sito web Symfony risiede in https://www.stackoverflow.com/app1/
, questi due metodi restituiscono questi valori:
getSchemeAndHttpHost
https://www.stackoverflow.com
getBaseUrl
/app1
Nota: getBaseUrl()
include il nome del file dello script (cioè /app.php
) se è nell'URL.
L'URL di base è definito all'interno Symfony\Component\Routing\RequestContext
.
Può essere recuperato dal controller in questo modo:
$this->container->get('router')->getContext()->getBaseUrl()
Per Symfony 2.3+, per ottenere l'URL di base in un controller dovrebbe essere
$this->get('request')->getSchemeAndHttpHost();
$this->container->get('request')->getSchemeAndHttpHost()
<base href="{{ app.request.getSchemeAndHttpHost() }}"/>
o dal controller
$this->container->get('router')->getContext()->getSchemeAndHttpHost()
Anche per js / css / URL immagine c'è una comoda funzione asset ()
<img src="{{ asset('image/logo.png') }}"/>
Invece di passare la variabile al modello globalmente, puoi definire un modello di base e renderizzare la "parte globale" in esso. Il modello di base può essere ereditato.
Esempio di rendering di template Dalla documentazione di symfony:
<div id="sidebar">
{% render "AcmeArticleBundle:Article:recentArticles" with {'max': 3} %}
</div>
Per la versione corrente di Symfony (al momento della stesura di questa risposta è Symfony 4.1) non accedere direttamente al contenitore dei servizi come fatto in alcune delle altre risposte.
Invece (a meno che non utilizzi la configurazione dei servizi standard), inietta l'oggetto richiesta mediante il suggerimento del tipo.
<?php
namespace App\Service;
use Symfony\Component\HttpFoundation\RequestStack;
/**
* The YourService class provides a method for retrieving the base URL.
*
* @package App\Service
*/
class YourService
{
/**
* @var string
*/
protected $baseUrl;
/**
* YourService constructor.
*
* @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
*/
public function __construct(RequestStack $requestStack)
{
$this->baseUrl = $requestStack->getCurrentRequest()->getSchemeAndHttpHost();
}
/**
* Returns the current base URL.
*
* @return string
*/
public function getBaseUrl(): string
{
return $this->baseUrl;
}
}
Vedere anche la documentazione ufficiale di Symfony su come recuperare l'oggetto richiesta corrente .
{{ dump(app.request.server.get('DOCUMENT_ROOT')) }}
Ho provato tutte le opzioni qui ma non hanno funzionato per me. Alla fine l'ho fatto funzionare usando
{{ URL del sito }}
Spero che questo aiuti qualcuno che sta ancora lottando.
site
contiene?