Fluent setter 在工厂返回空值 - PHP
Fluent setter returning null value on a factory - PHP
在 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;
}
此工厂由 Service 使用,由 Symfony command 使用。
让我们现在解释一下问题:
- 在带有开发设备的本地开发环境中执行命令时,工厂正确地创建并 return 对象。
- 在使用 preprod 数据库的本地开发环境中执行命令时,工厂正确创建并 return 对象。
- 在使用 preprod 数据库的 preprod 环境中执行命令时,出现以下错误:
PHP 致命错误:在第 37[= 行的 /var/www/application/src/Company/MyBundle/Factory/ChildRequestFactory.php 中调用成员函数 setFoo() 为 null 14=]
[Symfony\Component\Debug\Exception\FatalErrorException]
错误:在 null
上调用成员函数 setFoo()
异常跟踪:
() 在 /var/www/application/src/Company/MyBundle/Factory/ChildRequestFactory.php:37
此错误仅出现在预生产环境中。
我已经检查了版本控制,代码在本地和预生产环境的相同 git 分支上。
缓存已在 preprod 中删除。
数据库 sync/schema 更新:OK
Symfony 版本:2.7.13(本地和预生产)
PHP 版本:5.6.17(本地)/5.6.23(预生产)
当我不使用 fluent setters 时,它解决了 preprod env 上的问题。
有什么想法吗?
注意:为了保密,我已经更改了包的名称和一些variables/classes/methods。
更新:
这是 setIsValid setter returning null。
/**
* Set is_valid
*
* @param integer $isValid
*/
public function setIsValid($isValid)
{
$this->isValid = $isValid;
return $this;
}
也许 setIsValid
不 return $this
另一个对象?
于是我找到了问题的根源。我通常使用命令行执行变基、交互式变基或二分法等操作,但我使用 GitKraken 进行简单的提交和推送。我想在使用它时存在一些问题,因为包括使所有 setter 流利在内的更改没有被推送到 preprod 环境。真遗憾我没有看到它......除了这些之外,所有新变化都出现在预生产环境中。谢谢大家。
在 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;
}
此工厂由 Service 使用,由 Symfony command 使用。 让我们现在解释一下问题:
- 在带有开发设备的本地开发环境中执行命令时,工厂正确地创建并 return 对象。
- 在使用 preprod 数据库的本地开发环境中执行命令时,工厂正确创建并 return 对象。
- 在使用 preprod 数据库的 preprod 环境中执行命令时,出现以下错误:
PHP 致命错误:在第 37[= 行的 /var/www/application/src/Company/MyBundle/Factory/ChildRequestFactory.php 中调用成员函数 setFoo() 为 null 14=]
[Symfony\Component\Debug\Exception\FatalErrorException] 错误:在 null
上调用成员函数 setFoo()异常跟踪: () 在 /var/www/application/src/Company/MyBundle/Factory/ChildRequestFactory.php:37
此错误仅出现在预生产环境中。 我已经检查了版本控制,代码在本地和预生产环境的相同 git 分支上。 缓存已在 preprod 中删除。 数据库 sync/schema 更新:OK
Symfony 版本:2.7.13(本地和预生产) PHP 版本:5.6.17(本地)/5.6.23(预生产)
当我不使用 fluent setters 时,它解决了 preprod env 上的问题。
有什么想法吗?
注意:为了保密,我已经更改了包的名称和一些variables/classes/methods。
更新:
这是 setIsValid setter returning null。
/**
* Set is_valid
*
* @param integer $isValid
*/
public function setIsValid($isValid)
{
$this->isValid = $isValid;
return $this;
}
也许 setIsValid
不 return $this
另一个对象?
于是我找到了问题的根源。我通常使用命令行执行变基、交互式变基或二分法等操作,但我使用 GitKraken 进行简单的提交和推送。我想在使用它时存在一些问题,因为包括使所有 setter 流利在内的更改没有被推送到 preprod 环境。真遗憾我没有看到它......除了这些之外,所有新变化都出现在预生产环境中。谢谢大家。