Estoy haciendo el cambio de CodeIgniter a Symfony 2. ¿Puede alguien darme un ejemplo de cómo:
- Obtener la URL base (la URL sin las partes específicas de la ruta)
- Pase globalmente esta variable al paquete twig para que pueda usarla en cada plantilla.
Estoy haciendo el cambio de CodeIgniter a Symfony 2. ¿Puede alguien darme un ejemplo de cómo:
Respuestas:
¿Por qué necesita obtener esta URL raíz? ¿No puedes generar directamente URL absolutas?
{{ url('_demo_hello', { 'name': 'Thomas' }) }}
Este código Twig generará la URL http: // completa a la ruta _demo_hello.
De hecho, obtener la URL base del sitio web solo es obtener la URL completa de la ruta de la página de inicio:
{{ url('homepage') }}
( página de inicio , o como lo llame en su archivo de enrutamiento).
Esto ahora está disponible de forma gratuita en plantillas twig (probado en sf2 versión 2.0.14)
{{ app.request.getBaseURL() }}
En versiones posteriores de Symfony (probadas en 2.5), intente:
{{ app.request.getSchemeAndHttpHost() }}
{{ app.request.baseUrl }}
(localizará el método getter y lo llamará automáticamente)
{{ app.request.getSchemeAndHttpHost() }}
funciona!
Puede utilizar el nuevo método de solicitud getSchemeAndHttpHost()
:
{{ app.request.getSchemeAndHttpHost() }}
Válido desde Symfony v2.1 hasta v4.1 +
Si desea la URL base para una aplicación Symfony, debe usar getSchemeAndHttpHost()
concatenada junto con getBaseUrl()
, similar a cómo getUri()
funciona, excepto sin la ruta del enrutador y la cadena de consulta.
{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }}
Por ejemplo, si la URL de su sitio web Symfony reside en https://www.stackoverflow.com/app1/
, estos dos métodos devuelven estos valores:
getSchemeAndHttpHost
https://www.stackoverflow.com
getBaseUrl
/app1
Nota: getBaseUrl()
incluye el nombre del archivo de secuencia de comandos (es decir /app.php
) si está en su URL.
La URL base se define en el interior Symfony\Component\Routing\RequestContext
.
Se puede obtener del controlador de esta manera:
$this->container->get('router')->getContext()->getBaseUrl()
Para Symfony 2.3+, para obtener la URL base en un controlador debe ser
$this->get('request')->getSchemeAndHttpHost();
$this->container->get('request')->getSchemeAndHttpHost()
<base href="{{ app.request.getSchemeAndHttpHost() }}"/>
o del controlador
$this->container->get('router')->getContext()->getSchemeAndHttpHost()
También para js / css / image urls hay una función útil asset ()
<img src="{{ asset('image/logo.png') }}"/>
En lugar de pasar una variable a una plantilla globalmente, puede definir una plantilla base y representar la 'parte global' en ella. La plantilla base se puede heredar.
Ejemplo de plantilla de renderizado de la documentación de Symfony:
<div id="sidebar">
{% render "AcmeArticleBundle:Article:recentArticles" with {'max': 3} %}
</div>
Para la versión actual de Symfony (al momento de escribir esta respuesta, es Symfony 4.1) no acceda directamente al contenedor de servicios como se hace en algunas de las otras respuestas.
En su lugar (a menos que no use la configuración de servicios estándar), inyecte el objeto de solicitud mediante sugerencias de 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;
}
}
Consulte también los documentos oficiales de Symfony sobre cómo recuperar el objeto de solicitud actual .
{{ dump(app.request.server.get('DOCUMENT_ROOT')) }}
Probé todas las opciones aquí, pero no funcionaron para mí. Finalmente lo hice funcionar usando
{{ Sitio URL }}
Espero que esto ayude a alguien que todavía está luchando.
site
contiene?