编程语言
首页 > 编程语言> > 在功能测试中使用PHP的class_alias时重​​新声明类的问题

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

作者:互联网

我正在使用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的测试人员没有以相同的方式清除吞吐量.
有没有办法“ unalias”或以其他方式允许这种重新声明?

解决方法:

作为一种替代解决方案,您可以分配要实例化的类的名称给一个变量,并为其新建变量:

public function executeEdit(sfWebRequest $request) {
  $formType;
  switch($request->getParameter('page')) {
    case 'page-1':
      $formType = 'MyFormPage1Form';
    break;
    ...
  }
  $this->form = new $formType();
}

这不使用class_alias,而是将实例化放在一个位置.

标签:symfony1,functional-testing,php
来源: https://codeday.me/bug/20191209/2097456.html