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;
}
zeigen Sie uns Ihre 'setIsValid' Methode –
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? –
@TomaszMadeyski Es funktioniert nicht, wenn konkrete Wert wie 1 übergeben. Gleiches Problem –