CodeIgniter'dan Symfony 2'ye geçiş yapıyorum. Biri bana nasıl yapılacağına dair bir örnek verebilir mi:
- Temel url'yi alın (rotaya özel bölümler içermeyen url)
- Bu değişkeni küresel olarak dal paketine geçirin, böylece onu her şablonda kullanabilirim.
CodeIgniter'dan Symfony 2'ye geçiş yapıyorum. Biri bana nasıl yapılacağına dair bir örnek verebilir mi:
Yanıtlar:
Bu kök url'yi neden almanız gerekiyor? Doğrudan mutlak URL'ler üretemez misiniz?
{{ url('_demo_hello', { 'name': 'Thomas' }) }}
Bu Twig kodu, _demo_hello yolunun tam http: // url'sini oluşturacaktır.
Aslında, web sitesinin temel URL'sini almak, yalnızca ana sayfa yolunun tam URL'sini almaktır:
{{ url('homepage') }}
( ana sayfa veya yönlendirme dosyanızda adı ne olursa olsun).
Bu artık twig şablonlarında ücretsiz olarak mevcuttur (sf2 sürüm 2.0.14'te test edilmiştir)
{{ app.request.getBaseURL() }}
Daha sonraki Symfony sürümlerinde (2.5'te test edilmiştir) şunları deneyin:
{{ app.request.getSchemeAndHttpHost() }}
{{ app.request.baseUrl }}(alıcı yöntemini bulur ve otomatik olarak çağırır)
{{ app.request.getSchemeAndHttpHost() }}işe yarıyor!
Yeni istek yöntemini kullanabilirsiniz getSchemeAndHttpHost():
{{ app.request.getSchemeAndHttpHost() }}
Symfony v2.1 ile v4.1 + arasında geçerlidir
Temel URL'yi bir Symfony uygulaması için istiyorsanız , yönlendirici yolu ve sorgu dizesi dışında, nasıl çalıştığına benzer şekilde, getSchemeAndHttpHost()ile birlikte birleştirmeyi kullanmalısınız .getBaseUrl()getUri()
{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }}
Örneğin, Symfony web sitesi URL'niz konumunda bulunuyorsa https://www.stackoverflow.com/app1/, bu iki yöntem şu değerleri döndürür:
getSchemeAndHttpHost
https://www.stackoverflow.com
getBaseUrl
/app1
Not: URL'nizdeyse getBaseUrl()komut dosyası dosya adını (yani /app.php) içerir .
Temel url içeride tanımlanmıştır Symfony\Component\Routing\RequestContext.
Denetleyiciden şu şekilde getirilebilir:
$this->container->get('router')->getContext()->getBaseUrl()
Symfony 2.3+ için, bir denetleyicide temel url'yi almak için
$this->get('request')->getSchemeAndHttpHost();
$this->container->get('request')->getSchemeAndHttpHost()
<base href="{{ app.request.getSchemeAndHttpHost() }}"/>
veya denetleyiciden
$this->container->get('router')->getContext()->getSchemeAndHttpHost()
Ayrıca js / css / resim url'leri için kullanışlı işlev varlığı () var
<img src="{{ asset('image/logo.png') }}"/>
Değişkeni global olarak şablona geçirmek yerine, bir temel şablon tanımlayabilir ve içindeki 'global kısmı' oluşturabilirsiniz. Temel şablon miras alınabilir.
Şablon oluşturma örneği Symfony Belgelerinden:
<div id="sidebar">
{% render "AcmeArticleBundle:Article:recentArticles" with {'max': 3} %}
</div>
Mevcut Symfony sürümü için (bu cevabı yazarken, Symfony 4.1), diğer cevapların bazılarında olduğu gibi servis konteynerine doğrudan erişmeyin.
Bunun yerine (standart servis yapılandırmasını kullanmadığınız sürece), istek nesnesini tip ipucu ile enjekte edin.
<?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;
}
}
Ayrıca geçerli istek nesnesinin nasıl alınacağıyla ilgili resmi Symfony belgelerine bakın .
{{ dump(app.request.server.get('DOCUMENT_ROOT')) }}
Symfony 5'te ve bir denetleyici yönteminin genel durumunda, enjekte edilen Request nesnesini kullanın :
public function controllerFunction(Request $request, LoggerInterface $logger)
...
$scheme = $request->getSchemeAndHttpHost();
$logger->info('Domain is: ' . $scheme);
...
//prepare to render
$retarray = array(
...
'scheme' => $scheme,
...
);
return $this->render('Template.html.twig', $retarray);
}
Buradaki tüm seçenekleri denedim ama benim için işe yaramadı. Sonunda kullanarak çalıştırdım
{{ Site URL'si }}
Umarım bu hala mücadele eden birine yardımcı olur.
siteiçerir?