我正在使用 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);
}
这在浏览网站时效果很好,但我的功能测试失败了,因为当一个页面被加载不止一次时,就像这样:
$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 的测试人员没有以相同的方式清除吞吐量。 有没有办法“取消别名”或以其他方式允许这种重新声明?
最佳答案
作为替代解决方案,您可以将要实例化的类的名称分配给变量并新建:
public function executeEdit(sfWebRequest $request) {
$formType;
switch($request->getParameter('page')) {
case 'page-1':
$formType = 'MyFormPage1Form';
break;
...
}
$this->form = new $formType();
}
这不使用 class_alias 但将实例化保持在一个位置。
关于php - 在功能测试中使用 PHP 的 class_alias 时重新声明类的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3395718/