2017-05-26 36 views
0

在我创建了下面的厂symfony项目:流利的二传手在工厂返回空值 - PHP

<?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的命令使用服务。 我们现在解释这个问题:

  • 当执行在本地开发环境中开发灯具的命令,工厂正确地创建并返回一个对象。
  • 在使用preprod数据库的本地开发环境中执行命令时,工厂正确地创建并返回对象。
  • 当使用preprod数据库中preprod环境中执行的命令,以下引发错误:

PHP致命错误:调用一个成员函数setFoo()上的空在/ var /网络/应用/ SRC /Company/MyBundle/Factory/ChildRequestFactory.php上线37

[Symfony的\元器件\调试\异常\ FatalErrorException] 错误:调用一个成员函数setFoo()上的空

异常跟踪: ()在/var/www/application/src/Company/MyBundle/Factory/ChildRequestFactory.php:37

该错误只出现在preprod环境。 我已经检查过版本,代码位于本地和preprod环境的同一个git分支上。 缓存已经在preprod中删除。 数据库同步/架构更新:OK

Symfony的版本:2.7.13(本地和preprod) PHP版本:5.6.17(本地)/ 23年6月5日(preprod)

当我不使用流利的setters时,它解决了preprod env中的问题。

有什么想法?

注意:我已经更改了包的名称和一些变量/类/方法的机密性。

更新:

这是setIsValid二传手返回null。

/** 
* Set is_valid 
* 
* @param integer $isValid 
*/ 
public function setIsValid($isValid) 
{ 
    $this->isValid = $isValid; 

    return $this; 
} 
+0

告诉我们你的'setIsValid'方法 –

+0

我赌的是,有一些错误'ParentRequest :: IS_VALIDATED' - 自动加载的一些问题,或者类似的东西,但它很难说是肯定的。你可以尝试改变它到一个具体的价值,看看这是否有效? –

+0

@TomaszMadeyski当传递像1这样的具体值时它不起作用。同一问题 –

回答

2

所以我找到了问题的根源。我通常使用命令行进行rebase,interactive rebases或bisects操作,但我使用GitKraken进行简单的提交和推送。我猜想使用它有一些问题,因为包括使所有制定者流利的变化未被推到preprod环境。多么可惜,我没有看到它......除了这些之外,所有新的变化都存在于前生环境中。感谢大家。

1

也许setIsValid不返回$this OT另一个对象?

+0

我已经检查过这个问题。所有的设置者都会返回$ this ...以及为什么它不能仅在preprod环境下使用相同的数据装置? –

+0

我无法回答没有代码。也许你在setter中有一些条件并返回null/void。或者你重写类和子(或父)返回null。 – zebratuk