Estou mudando de CodeIgniter para Symfony 2. Alguém pode me dar um exemplo de como:
- Obtenha o url de base (o url sem as partes específicas da rota)
- Passe globalmente essa variável para o pacote de galhos para que eu possa usá-la em todos os modelos.
Estou mudando de CodeIgniter para Symfony 2. Alguém pode me dar um exemplo de como:
Respostas:
Por que você precisa obter este URL de raiz? Você não pode gerar URLs absolutos diretamente?
{{ url('_demo_hello', { 'name': 'Thomas' }) }}
Este código Twig irá gerar o http: // url completo para a rota _demo_hello.
Na verdade, obter o URL base do site é apenas obter o URL completo da rota da página inicial:
{{ url('homepage') }}
( página inicial , ou o que quer que você chame em seu arquivo de roteamento).
Isso agora está disponível gratuitamente em modelos de galhos (testado em sf2 versão 2.0.14)
{{ app.request.getBaseURL() }}
Em versões posteriores do Symfony (testado em 2.5), tente:
{{ app.request.getSchemeAndHttpHost() }}
{{ app.request.baseUrl }}(localizará o método getter e o chamará automaticamente)
{{ app.request.getSchemeAndHttpHost() }}funciona!
Você pode usar o novo método de solicitação getSchemeAndHttpHost():
{{ app.request.getSchemeAndHttpHost() }}
Válido do Symfony v2.1 até v4.1 +
Se você quiser a URL base para um aplicativo Symfony, você deve usar getSchemeAndHttpHost()concatenado junto com getBaseUrl(), semelhante a como getUri()funciona, exceto sem o caminho do roteador e a string de consulta.
{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }}
Por exemplo, se o URL do seu site Symfony residir em https://www.stackoverflow.com/app1/, esses dois métodos retornam estes valores:
getSchemeAndHttpHost
https://www.stackoverflow.com
getBaseUrl
/app1
Nota: getBaseUrl()inclui o nome do arquivo do script (ou seja, /app.phpse estiver no seu URL).
O URL base é definido internamente Symfony\Component\Routing\RequestContext.
Ele pode ser obtido do controlador desta forma:
$this->container->get('router')->getContext()->getBaseUrl()
Para Symfony 2.3+, para obter a url base em um controlador deve ser
$this->get('request')->getSchemeAndHttpHost();
$this->container->get('request')->getSchemeAndHttpHost()
<base href="{{ app.request.getSchemeAndHttpHost() }}"/>
ou do controlador
$this->container->get('router')->getContext()->getSchemeAndHttpHost()
Também para js / css / urls de imagem, há uma função útil asset ()
<img src="{{ asset('image/logo.png') }}"/>
Em vez de passar a variável para o modelo globalmente, você pode definir um modelo base e renderizar a 'parte global' nele. O modelo básico pode ser herdado.
Exemplo de modelo de renderização da documentação do symfony:
<div id="sidebar">
{% render "AcmeArticleBundle:Article:recentArticles" with {'max': 3} %}
</div>
Para a versão atual do Symfony (quando escrevi esta resposta, é Symfony 4.1) não acesse diretamente o contêiner de serviço como feito em algumas das outras respostas.
Em vez disso (a menos que você não use a configuração de serviços padrão), injete o objeto de solicitação por sugestão 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;
}
}
Veja também a documentação oficial do Symfony sobre como recuperar o objeto de solicitação atual .
{{ dump(app.request.server.get('DOCUMENT_ROOT')) }}
Eu tentei todas as opções aqui, mas elas não funcionaram para mim. Acabei fazendo funcionar usando
{{ URL do site }}
Espero que isso ajude alguém que ainda está lutando.
sitecontém?