2017-05-26 35 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