2011-11-25 15 views
6

Sadece AJAX aracılığıyla erişilebilen denetleyicilerden birinde bir durumum var, aşağıdaki koda sahibim. Denetleyicinin içindeki ortamı alın

if (!$request->isXmlHttpRequest()) { 
    $response = new Response(); 
    $response->setContent('AJAX requests only!'); 
    return $response; 
} 

ben isteği aslında AJAX aracılığıyla yapılan edilmemiştir çünkü bu bana bir sorunu veriyor test ediyorum zaman. Bu daha sonra testlerimi her zaman kırıyor. Bu konuda çalışmak için nasıl gitmeliyim?

Benim Fikirler:

  1. Bir sunucu başlığını ayarlamak için çalıştık ama kesinlikle hiçbir başarıya sahiptir.
  2. Denetleyicideki sınama ortamında olup olmadığımı kontrol edin ve olup olmadığını kontrol edin. Bunun kirli olduğunu biliyorum, ama işe yarayacaktı. : -/Sorun şu ki, hangi ortamda olduğumu anlayamadım.

Yukarıdakilerden herhangi birini almak için eksik olduğum başka herhangi bir fikrim yok mu?

+1

nasıl testlerinizde başlığını kurdun ? – meze

+0

Kabul edilen yanıt hakkındaki yorumuma bakın. – Icode4food

cevap

5

sınıfında ServerBag sınıf Request ve yönteme getHeaders yılında isXmlHttpRequest için kod baktığımızda aşağıdaki kod parçası hile yapmak gerekir:

$client->request(
    'GET', 
    '/path/to/test', 
    array(), 
    array(), 
    array(
     'HTTP_X-Requested-With' => 'XMLHttpRequest', 
    ) 
); 

Ben şahsen test etmedi ama eserlerini gerektiğini düşünüyorum. Request'da aşağıdaki kod satırı, http isteğinin XmlHttpRequest olup olmadığını kontrol etmek için kullanılır. kodda

return 'XMLHttpRequest' == $this->headers->get('X-Requested-With'); 

, $this->headers kullanılarak ayarlanır:

$this->headers = new HeaderBag($this->server->getHeaders()); 

yöntem getHeaders başlıklarının bir dizisini oluşturur. HTTP_ ile başlayan her sunucu değişkeni ve CONTENT_TYPE gibi bazı özel sunucu değişkenleri bu diziye eklenir.

Bu yardımcı olur umarım.

Selamlar,
Matt Icode4food davasında Tabii

+0

Başlığa sorunu çarptı. Üstbilgiyi "HTTP_" öneki yerine "X-İstekli" olarak ayarlıyordum. Bunu denediğimi sandım ama sanırım değil. Teşekkürler. – Icode4food

8

, bu Matt'in çözümünü kullanmak daha iyidir, ama burada geçerli çevreyi bulmak için yapılması gerekenler:

$this->container->getParameter(‘kernel.environment’) 
+0

$ container-> getParameter ('kernel.environment') ;? –

+0

@ TroodoN-Mike - evet, değiştirildi. sabit. – dvb

İlgili konular