5

CakePHPでは、URLにクエリ文字列を入れても、コントローラーが直接呼び出されたときのように、クエリ文字列が自動的に解析および分割されることはありません。

例えば:

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

結果は次のようになります。

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

Webブラウザを介してURLを直接呼び出すと、次のようになります。

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

CakePHPソースを編集せずに、単体テストを実行するときにクエリ文字列を分割する方法はありますか?

4

4 に答える 4

3

私はハック (つまり、将来の CakePHP リリースでは動作しない可能性があります) または文書化されていない機能のいずれかを持っています。

2 番目の testAction パラメーターに「url」という名前の配列が含まれている場合、値はコントローラーの $this->params オブジェクトに配置されます。これにより、コントローラーが直接呼び出された場合と同じ最終結果が得られます。

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

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

私がする必要があることについては、この方法に満足しています。近いうちにコミュニティに質問を公開して、将来的により良い回答を提供できるようにします。

于 2008-10-14T13:18:06.467 に答える
1

これらの回答はどれも Cake 1.3 では機能しません。代わりに、testAction 呼び出しの前に次を設定する必要があります。

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

于 2011-02-09T15:50:42.290 に答える
0

CakePHP はある程度の URL 分割を提供しますが、実行時の構成でのみ機能し、テスト構成では機能しないようです。これが意図的なものである場合は、CakePHP に連絡します。

クエリ文字列パーサーについては、PHP 関数を使用することをお勧めしますexpand

次のようなことができると思います:

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

これにより、次のように反復して2番目の爆発を実行できる個別の配列スロットにキーペアが提供されます。

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

しかし、以上のことから、CakePHP の内部をのぞいて、何をしているのかを確認する方がよいでしょう。

上記で入力したものは、クエリ文字列に html エスケープ文字 (& で始まる) が含まれている状況を正しく処理できず、16 進数でエンコードされた URL 文字列も処理できません。

于 2008-10-14T14:43:16.607 に答える
-1

use _GET['parmname'];

于 2009-11-03T09:13:40.830 に答える