在Symfony项目中,我创建了以下工厂:
<?php
namespace Company\MyBundle\Factory;
use Company\MyBundle\Entity\ParentRequest;
use Company\MyBundle\Entity\ChildRequest;
use Company\MyBundle\Entity\Foo;
use Company\MyBundle\Entity\Bar;
/**
* Class ChildRequestFactory
*
* Factory instanciating ChildRequest with several values
* @package Company\MyBundle\Factory
*/
class ChildRequestFactory extends AbstractRequestFactory
{
/**
* @param \DateTime $date
* @param Bar|null $bar
* @param Foo|null $foo
* @return ChildRequest
*/
public function createRequest(\DateTime $date, Bar $bar
= null, Foo $foo = null)
{
$childRequest = new ChildRequest();
$childRequest
->setDateValidation($date)
->setIsValid(ParentRequest::IS_VALIDATED)
->setFoo($foo)
->setBar($bar)
->setBaz('baz')
->setOrigin('Manager')
;
return $childRequest;
}
此工厂由Symfony 命令使用的服务使用。 我们现在解释一下这个问题:
PHP致命错误:在第37行的/var/www/application/src/Company/MyBundle/Factory/ChildRequestFactory.php中调用null上的成员函数setFoo()
[Symfony的\元器件\调试\异常\ FatalErrorException] 错误:在null
上调用成员函数setFoo()异常追踪: ()at /var/www/application/src/Company/MyBundle/Factory/ChildRequestFactory.php:37
此错误仅出现在preprod环境中。 我已经检查了版本控制,代码在本地和preprod环境的同一个git分支上。 缓存已在preprod中删除。 数据库同步/架构更新:确定
Symfony版本: 2.7.13 (本地和preprod) PHP版本: 5.6.17 (本地)/ 5.6.23 (preprod)
当我不使用流利的设置器时,它解决了preprod环境中的问题。
有什么想法吗?
注意:我已经更改了捆绑包的名称以及一些用于保密的变量/类/方法。
更新:
这是setIsValid setter返回null。
/**
* Set is_valid
*
* @param integer $isValid
*/
public function setIsValid($isValid)
{
$this->isValid = $isValid;
return $this;
}
答案 0 :(得分:3)
所以我找到了问题的根源。我通常使用命令行进行rebase,interactive rebase或bisects等操作,但我使用GitKraken进行简单的提交和推送。我认为使用它有一些问题,因为包括使所有设置器流畅的更改没有被推到preprod环境。遗憾的是我没有看到它...除了这些之外,所有新的变化都出现在preprod环境中。谢谢大家。
答案 1 :(得分:1)
也许setIsValid
不会返回$this
另一个对象?