CakePHP 1.2 TestAction için sorgu dizesi geçmek için?

4 Cevap php

CakePHP url bir sorgu dizesi koyarak otomatik olarak ayrıştırılması neden ve denetleyici doğrudan çağrıldığında normal gibi bölmez.

Örneğin:

$this->testAction('/testing/post?company=utCompany', array('return' => 'vars')) ;

: neden olur

[url] => /testing/post?company=utCompany

: In web tarayıcısı sonuçları üzerinden doğrudan url çağırarak

[url] => Array
    (
        [url] => testing/post
        [company] => utCompany
    )

CakePHP kaynağını düzenlemeden, ünite testleri çalıştırırken QueryString bölünmüş olması için bir yol var mı?

4 Cevap

Ben bir hack (yani gelecekteki CakePHP sürümleri için çalışmayabilir) veya belgelenmemiş bir özellik ya ne var.

İkinci TestAction parametre 'url' denilen bir adlandırılmış dizi varsa o değerleri $ this-> params alınacaktır denetleyicisi nesne. Bu bize Kontrolör doğrudan çağrıldığında gibi aynı net sonuç verir.

$data = array ('company' => 'utCompany') ;

$result = $this->testAction('/testing/post', array
(
    'return' => 'vars', 
    'method' => 'get', 
    'url' => $data)
) ;

Yapmam gereken ne için bu yöntemle memnun değilim. Ben kısa bir süre böylece gelecekte daha iyi bir cevap verilebilir ki topluma soruyu açacağım.

Bu yanıtların hiçbiri Cake 1.3 woerk olacaktır. Sen yerine TestAction çağrı önce aşağıdaki ayarlamanız gerekir:

$this->__savedGetData['company'] = 'utcompany';

CakePHP url bölme bazı düzeyi sağlamaz ama sadece çalışma zamanı yapılandırmasına ve değil test yapılandırması çalışmak gibi görünüyor. Bu kasıtlı olup olmadığını CakePHP'ye ulaşacağız.

Lütfen querystring çözümleyici için ben öneri PHP işlevi explode kullanmak olacaktır.

Ben böyle bir şey yapabileceğine inanıyorum:

$result = explode ('&', $queryString, -1) ;

size yineleme ve ikinci böylece gibi patlayabilir gerçekleştirebilirsiniz bunun üzerine ayrı dizi yuva içinde anahtar çiftleri verecek olan:

$keyPair = explode ('=', $result[n], -1) ;

Ancak, tüm bu varlık o CakePHP başlık altında gözetleme ve ne yaptıklarını görmek için daha iyi olacağını söyledi.

Ne yukarıda yazdığınız doğru querystring html (ve öneki ile) karakterleri, ne de altıgen kodlanmış url dizelerini idare edecek içeren durumlarla başa olmaz.

_GET ['parmname'] kullanmak;