2017-05-26 4 views
0

In einem Symfony Projekt, das ich die Fabrik unten erstellt haben:Fluent Setter auf einer Fabrik Nullwert zurückkehrt - 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; 
    } 

Diese Fabrik von Dienst durch einen Befehl Symfony verwendet wird. Lassen Sie uns erklären, das Problem jetzt:

  • Wenn in lokalen dev Umgebung mit dev Vorrichtungen der Befehl ausgeführt wird, korrekt die Fabrik erstellen und das Objekt zurück.
  • Wenn der Befehl in lokaler Entwicklungsumgebung mit Preprod-Datenbank ausgeführt wird, erstellt die Factory das Objekt korrekt und gibt das Objekt zurück.
  • Wenn der Befehl in preprod Umgebung unter Verwendung preprod Datenbank ausgeführt wird, wird der folgende Fehler ausgelöst:

PHP Fatal error: Aufruf an eine Elementfunktion setFoo() auf null in/var/www/application/src /Company/MyBundle/Factory/ChildRequestFactory.php auf Leitung 37

[Symfony \ Component \ Debug \ Exception \ FatalErrorException] Fehler: Aufruf an eine Elementfunktion setFoo() auf null

Exception-Trace: bei () /var/www/application/src/Company/MyBundle/Factory/ChildRequestFactory.php:37

Dieser Fehler tritt nur auf der preprod Umwelt. Ich habe bereits die Versionierung überprüft, der Code befindet sich auf demselben git-Zweig in der lokalen und der preprod-Umgebung. Der Cache wurde bereits in preprod entfernt. Datenbank sync/Schema Update: OK

Symfony Version: 2.7.13 (lokal und preprod) PHP-Version: 5.6.17 (local)/5.6.23 (preprod)

Wenn ich die fließenden Setter nicht benutze, ist das Problem mit preprod env gelöst.

Irgendeine Idee?

Hinweis: Ich habe den Namen des Bundles und einige Variablen/Klassen/Methoden für die Vertraulichkeit geändert.

Update:

Dies ist die setIsValid Setter null zurück.

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

    return $this; 
} 
+0

zeigen Sie uns Ihre 'setIsValid' Methode –

+0

meine Wette ist, dass etwas mit 'ParentRequest :: IS_VALIDATED' falsch ist - etwas Autoload Problem oder etwas ähnliches, aber es ist schwer zu sagen, sicher. Können Sie versuchen, es zu einem konkreten Wert zu ändern und sehen, ob das funktioniert? –

+0

@TomaszMadeyski Es funktioniert nicht, wenn konkrete Wert wie 1 übergeben. Gleiches Problem –

Antwort

2

So habe ich den Ursprung des Problems gefunden. Normalerweise mache ich Operationen wie Rebases, interaktive Rebases oder Halbierungen mit der Kommandozeile, aber ich benutze GitKraken für einfache Commits und Pushs. Ich nehme an, es gab einige Probleme bei der Verwendung, da die Änderungen, einschließlich der fließenden Einstellung aller Setter, nicht in die Preprod-Umgebung verschoben wurden. Was für eine Schande, ich habe es nicht gesehen ...Alle neuen Änderungen waren in der Preprod-Umgebung vorhanden, außer diesen. Danke an alle.

1

Vielleicht setIsValid nicht zurück $this ot eine andere Aufgabe?

+0

Ich habe dies bereits überprüft Problem. Alle Setter geben $ this zurück ... und warum funktioniert das nicht nur in der preprod Umgebung mit den gleichen Daten Fixtures? –

+0

Ich kann nicht ohne Code antworten. Vielleicht hast du eine Bedingung in diesem Setter und null/void zurückgeben. Oder Sie überschreiben Klasse und Kind (oder Eltern) geben null zurück. – zebratuk

Verwandte Themen