5 Stimmen

Wie übergibt man querystring an testAction in CakePHP 1.2?

In CakePHP, das einen Querystring in die URL einfügt, wird dieser nicht automatisch geparst und aufgeteilt, wie es normalerweise der Fall ist, wenn der Controller direkt aufgerufen wird.

Zum Beispiel:

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

zur Folge haben wird:

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

Der direkte Aufruf der URL über den Webbrowser führt zu einem Ergebnis:

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

Ohne den CakePHP-Quellcode zu bearbeiten, gibt es eine Möglichkeit, den Querystring beim Ausführen von Unit-Tests aufzuteilen?

3voto

Ryan Boucher Punkte 359

Ich habe, was ist entweder ein Hack (dh möglicherweise nicht für zukünftige CakePHP-Releases arbeiten) oder eine undokumentierte Funktion.

Wenn der zweite testAction-Parameter ein benanntes Array mit dem Namen "url" enthält, werden die Werte in das Objekt $this->params im Controller eingefügt. Damit erhalten wir das gleiche Ergebnis wie bei einem direkten Aufruf des Controllers.

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

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

Für das, was ich tun muss, bin ich mit dieser Methode zufrieden. Ich werde die Frage in Kürze an die Gemeinschaft weiterleiten, damit in Zukunft eine bessere Antwort gegeben werden kann.

1voto

Joel Moss Punkte 89

Keine dieser Antworten wird in Cake 1.3 funktionieren. Stattdessen sollten Sie vor Ihrem testAction-Aufruf Folgendes einstellen:

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

0voto

Ryan Boucher Punkte 359

CakePHP bietet ein gewisses Maß an Url-Splitting, aber es scheint nur in der Laufzeitkonfiguration und nicht in der Testkonfiguration zu funktionieren. Ich werde die CakePHP kontaktieren, wenn dies beabsichtigt ist.

Mein Vorschlag für Ihren Querystring-Parser wäre die Verwendung der PHP-Funktion explodieren .

Ich glaube, Sie können so etwas tun:

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

was Ihnen Ihre Schlüsselpaare in separaten Array-Slots geben würde, über die Sie iterieren und eine zweite Explosion wie folgt durchführen können:

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

Allerdings wäre es besser, einen Blick unter die Haube von CakePHP zu werfen und zu sehen, was sie tun.

Was ich oben getippt habe, wird nicht korrekt mit Situationen umgehen, in denen Ihr Querystring HTML-Escaped-Zeichen (mit vorangestelltem &) enthält, und auch nicht mit hexadezimal kodierten URL-Strings.

-1voto

SMSM Punkte 1459

_GET['parmname'] verwenden;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X