我使用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