2011-07-27 37 views
67

estoy haciendo el cambio de CodeIgniter Symfony 2. por favor alguien puede dar un ejemplo de cómo:Obtener la URL base de la página web y en el mundo de pasarlo al ramita en Symfony 2

  • Get la url base (la URL sin las partes específicas de la ruta)
  • Globalmente, pase esta variable al paquete twig para que pueda usarlo en todas las plantillas.
+0

posible duplicado de [ajuste dinámicamente el BaseUrl dentro de la configuración en Symfony2] (http://stackoverflow.com/questions/6381809/dynamically-setting-the-baseurl-within-configuration-in-symfony2) –

Respuesta

69

¿Por qué necesita obtener este URL de raíz? ¿No puedes generar URL directamente absolutas?

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

Este código de Twig generará la URL http: // completa en la ruta _demo_hello.

De hecho, obtener la URL base de la página web sólo es cada vez la URL completa de la ruta homepage:

{{ url('homepage') }} 

( página de inicio, o como se llame en su archivo de enrutamiento).

+0

Muchas gracias, pensé que este era el camino a seguir, pero solo sabía sobre la función {{path (..)}}, lo que llevaba a errores resultados. {{url}} es justo lo que necesitaba. – geoffreydv

+0

en caso de que esté procesando la ramita del comando de la consola de Symfony, digamos que para generar una plantilla de correo electrónico, necesito una URL base. ¿Cómo lo hago en ese caso? – vishal

+1

Hay un libro de cocina para eso: http://symfony.com/doc/master/cookbook/console/sending_emails.html – Damien

1

En lugar de pasar la variable a la plantilla globalmente, puede definir una plantilla base y representar la 'parte global' en ella. La plantilla base puede ser heredada.

Ejemplo de representación plantilla de la documentación de symfony:

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

url Base se define dentro de Symfony\Component\Routing\RequestContext.

Puede ser traída desde el controlador como este:

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

Esto es ahora disponible gratuitamente en plantillas Twig (probado en versión SF2 2.0.14)

{{ app.request.getBaseURL() }} 

En posteriores versiones Symfony (probado en 2.5), Probar:

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

Esto incluso puede acortarse a '{{app.request.baseUrl}}' (localizará el método getter y lo llamará automáticamente) –

+2

@Colin O'Dell además, es aún más apropiado NO USAR las llamadas a métodos en vista - La vista no debería saber qué métodos hay en el objeto. Aunque parece un poco diferente en Symfony, pero de todos modos +10 para esa respuesta. – thorinkor

+1

Si no estoy usando * twig *, ¿cómo puedo volver a escribir esto en * PHP *? – Nis

44

Usted puede utilizar el nuevo método de petición getSchemeAndHttpHost():

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

Esta función se introdujo en Symfony 2.1 – COil

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

o desde el controlador

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

Para Symfony 2.3 +, para obtener la url base en un controlador debe ser

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

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

16

Si desea la URL base de una aplicación Symfony, debe usar getSchemeAndHttpHost() concatenado junto con getBaseUrl(), similar a cómo funciona getUri(), excepto sin la ruta del enrutador y la cadena de consulta.

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

Por ejemplo, si su URL del sitio web de Symfony vive en https://www.stackoverflow.com/app1/, entonces estos dos métodos de devolución de estos valores:

getSchemeAndHttpHost

https://www.stackoverflow.com 

getBaseUrl

/app1 

Nota: getBaseUrl() incluye el nombre de archivo del script (es decir, /app.php) si está en su URL.

2

También js/css/imagen para URL hay práctico activo función()

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