gpt4 book ai didi

php - 在功能测试中使用 PHP 的 class_alias 时重新声明类的问题

转载 作者:搜寻专家 更新时间:2023-10-31 20:55:15 24 4
gpt4 key购买 nike

我正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com