我使用PHP 5.3的class_alias來幫助處理我的Symfony 1.4(Doctrine)表單。我使用單個動作來處理多個表單頁面,但使用switch語句來選擇要使用的表單類。在功能測試中使用PHP的class_alias時重新聲明類的問題
public function executeEdit(sfWebRequest $request) {
switch($request->getParameter('page')) {
case 'page-1':
class_alias('MyFormPage1Form', 'FormAlias');
break;
...
}
$this->form = new FormAlias($obj);
}
瀏覽網站時,該工作出色,但沒有我的功能測試,因爲當一個頁面加載不止一次,像這樣:
$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();
我得到一個500響應第二請求,出現以下錯誤:
last request threw an uncaught exception RuntimeException: PHP sent a warning error at /.../apps/frontend/modules/.../actions/actions.class.php line 225 (Cannot redeclare class FormAlias)
這使得很難測試表單提交(通常會自行發回)。
大概這是因爲Symfony的測試儀還沒有以相同的方式清除吞吐量。 有沒有辦法'unalias'或以其他方式允許這種重新聲明?
整潔。不知道這是可能的。似乎使class_alias有點多餘。我假設有一個性能差異。 – kenneth 2010-08-03 14:02:30
class_alias必須保留別名類的記錄,這會引入一個局部變量。不知道哪個更具影響力。 由於某種原因,class_alias必須添加到5.3.0,但我想不出來。 – Kwebble 2010-08-03 22:21:49