2016-03-25 22 views
0

2.4'dan beri hizmetlerimizde RequestStack enjekte edebiliriz.RequestStack ne zaman getCurrentRequest yerine getMasterRequest kullanmalıyım?

/** @var Request */ 
$request = $requestStack->getCurrentRequest(); 

// OR 

/** @var Request */ 
$request = $requestStack->getMasterRequest(); 

biz kullanmalısınız currentRequest:

akım Request almak için iki yöntem var mı?
Ve ne zaman masterRequest'u kullanmalıyız? Ben şimdiki Request gövdesinde parametreleri almak gerekiyorsa

Örneğin, ben kullanabilirsiniz:

$params = $request->request->all(); 

Ben iki yöntemden hangisi kullanmalıdır?

cevap

1

birden istekleri ile uğraşan, sigara usta talebi geliyor iç talepler. Genellikle ikinci isteği oluşturulur

{{ render(controller('foo')) }} 

şeklinde dal gelen, sadece istek formatı ve yerel yeni bir örneği kopyalanır. Bu nedenle, kullanıcıdan gelmeyi beklediğiniz herhangi bir veri mevcut olmayacaktır. Bu istek parametreleri, ip adresi ve herhangi bir HTTP üstbilgisini içerir. Çoğu durumda, yalnızca geçerli istek ile ilgilenmeniz gerekecektir. Ancak, sorunuzu cevaplamak için, kullanıcıdan gelen herhangi bir zamanda ihtiyacınız olduğunda, ana istekte bulunacaksınız. Bir örnek, bir CountryType form kontrolünü önceden seçmek için kullanıcıların IP adresini kullanacaktır.

getMasterRequest()->getClientIp() kullanırken, kullanıcının IP adresi (209.58.130.174 gibi bir şey) verilecektir. Master olmayanda çağırırken size localhost/loopback IP (127.0.0.1) verilecektir. Gerçekten null döndürecek herhangi bir yöntem yoktur, yalnızca isteğin nasıl oluşturulduğu hakkında farklı bilgiler döndürürler.

+0

İhtiyacım olan her şey için teşekkürler. Kullanıcı bilgilerinin mevcudiyeti hakkında, lütfen 'currentRequest' kullanarak erişilemeyen (veya boş bir sonuç veren) bir yöntemin bir örneğini verebilir ve 'masterRequest' kullanarak erişilebilir olabilir misiniz? – chalasr

+0

Teşekkür ederiz @Twifty! – chalasr

1

Asıl istek asıl kullanıcıdan gelen istektir; alt sorguda, ister HttpKernel'in forward() yöntemiyle isterse framework'ün Controller sınıfının forward() yardımcısıyla veya Twig'de {% render ...%} ile dahili olarak yaptığınız değerdir.

https://stackoverflow.com/a/12456998/1078488

Bu kullanıcı tarafından yapılan gerçek istekle explicitely yok isterseniz normalde geçerli isteği kullanabilirsiniz anlamına geliyor.

ben Mevcut isteği enjekte için bir hizmet kullandım:

app.request: 
    class: Symfony\Component\HttpFoundation\RequestStack 
    factory: 
     - '@request_stack' 
     - 'getCurrentRequest' 

Sonra böyle enjekte edebilir:

app.some_service: 
    class: AppBundle\Service\SomeService 
    arguments: 
     - '@app.request' 
     - '@some_other_service' 
+0

Cevabınız için teşekkür ederiz. Zaten vermiş olduğunuz soruyu gördüm, fakat "currentRequest" yerine "masterRequest" i ne zaman kullanmam gerektiğini göremiyorum ve ilk ya da ikincisini kullanarak bilgi almak için ne yapacağız? vücut parametreleri veya başlıklar gibi talep. Bu iki olasılık arasında doğru bir yol var mı? – chalasr

+0

Sadece bir oylama olarak bunu kapatmak için oylama yerine cevap vermemin sebebi buydu. – JimL

+0

Önceki yorumumda verdiğim soruları yanıtlamaya çalışabilir misiniz? Ve fabrika için teşekkürler, yararlıdır. – chalasr

İlgili konular