PHP 5.3 の class_alias を使用して、Symfony 1.4 (Doctrine) フォームの処理を支援しています。単一のアクションを使用して複数のフォーム ページを処理しますが、switch ステートメントを使用して使用するフォーム クラスを選択します。
public function executeEdit(sfWebRequest $request) {
switch($request->getParameter('page')) {
case 'page-1':
class_alias('MyFormPage1Form', 'FormAlias');
break;
...
}
$this->form = new FormAlias($obj);
}
これは、Web サイトを閲覧するときに見事に機能しますが、次のようにページが複数回読み込まれるため、機能テストに失敗します。
$browser->info('1 - Edit Form Page 1')->
get('/myforms/edit')->
with('response')->begin()->
isStatusCode(200)->
end()->
get('/myforms/edit')->
with('response')->begin()->
isStatusCode(200)->
end();
2 番目の要求に対して 500 応答が返され、次のエラーが表示されます。
最後のリクエストがキャッチされない例外をスローしました RuntimeException: PHP が /.../apps/frontend/modules/.../actions/actions.class.php 行 225 で警告エラーを送信しました (クラス FormAlias を再宣言できません)
これにより、フォームの送信をテストすることが非常に難しくなります (通常、フォーム自体にポストバックされます)。
おそらくこれは、Symfony のテスターが同じようにスループットをクリアしていないためです。「unalias」またはこの種の再宣言を許可する方法はありますか?