2017-05-26 18 views
0

私は下のファクトリーを作成しているsymfonyプロジェクトで:この工場は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; 
    } 

。 のが今の問題を説明してみましょう:

  • のdevの備品と地元のdevの環境でコマンドを実行し、工場を正しく作成したオブジェクトを返します。
  • preprodデータベースを使用してローカルのdev環境でコマンドを実行すると、ファクトリはオブジェクトを正しく作成して返します。
  • preprodデータベースを使用してpreprod環境でコマンドを実行すると、以下のエラーが発生した:

PHPの致命的なエラー:は/ var/www /のアプリケーション/ srcの中でヌルに)(メンバ関数setFooに呼び出し/Company/MyBundle/Factory/ChildRequestFactory.phpライン上の37

[symfonyの\コンポーネント\デバッグ\例外の\ FatalErrorException] エラー:ヌルにメンバ関数setFoo()の呼び出し

例外トレース: ()/var/www/application/src/Company/MyBundle/Factory/ChildRequestFactory.php:37

でこのエラーはpreprod環境に表示されます。 私はすでにバージョン管理をチェックしていますが、コードはローカルとプリプロード環境の同じgitブランチ上にあります。 キャッシュはpreprodですでに削除されています。 データベースの同期/スキーマの更新:OK

symfonyのバージョン:2.7.13 (ローカルおよびpreprod) PHPバージョン:5.6.17 (ローカル)/ 5.6.23(preprod)

私が流暢なセッターを使用しないとき、それはpreprod envの問題を解決します。

注意:私は、機密性のためにバンドル名といくつかの変数/クラス/メソッドを変更しました。

更新:

これは、NULLを返すsetIsValidセッターです。

/** 
* 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

私はこの問題の原因を発見しました。私は通常、リベース、インタラクティブなリベース、コマンドラインによるバイセクトなどの操作を行いますが、単純なコミットとプッシュにはGitKrakenを使用します。私は、すべてのセッターを流暢にすることを含む変更がプリプロード環境にプッシュされなかったので、それを使用していくつかの問題があったと思います。私はそれを見ていませんでした...すべての新しい変更は、これらを除いてプリプロード環境に存在していました。みんな、ありがとう。

1

たぶんsetIsValidがot $this別のオブジェクトを返さないのですか?

+0

私は既にこれをチェックしています問題。すべてのセッターが$ thisを返します...なぜ同じデータフィクスチャを持つプリプロード環境でしか動作しないのですか? –

+0

コードなしで回答できません。たぶん、あなたはそのセッターにいくつかの条件があり、null/voidを返すでしょう。または、クラスと子(または親)がnullを返すようにオーバーライドします。 – zebratuk