В проекте Symfony я создал Фабрику ниже:
<?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 команда.
Давайте объясним проблему прямо сейчас:
Неустранимая ошибка PHP: вызов функции-члена setFoo () для null в /var/www/application/src/Company/MyBundle/Factory/ChildRequestFactory.php в строке 37
[Symfony \ Component \ Debug \ Exception \ FatalErrorException] Ошибка: вызов функции-члена setFoo () в null
Трассировка исключения:
() в /var/www/application/src/Company/MyBundle/Factory/ChildRequestFactory.php:37
Эта ошибка появляется только в среде preprod.
Я уже проверил версионирование, код находится в одной ветке git в локальной среде и в среде preprod.
Кеш уже был удален в preprod.
Синхронизация базы данных / обновление схемы: ОК
Версия Symfony: 2.7.13 (местный и препрод)
Версия PHP: 5.6.17 (местный) / 5.6.23 (Preprod)
Когда я не использую беглые сеттеры, это решает проблему в preprod env.
Любая идея ?
Примечание: я изменил имя пакета и некоторые переменные / классы / методы для конфиденциальности.
Обновить :
Это setIsValid setter, возвращающий ноль.
/**
* Set is_valid
*
* @param integer $isValid
*/
public function setIsValid($isValid)
{
$this->isValid = $isValid;
return $this;
}
Итак, я нашел источник проблемы. Я обычно выполняю такие операции, как перебазирование, интерактивное перебазирование или деление пополам с командной строкой, но я использую GitKraken для простых фиксаций и нажатий. Я предполагаю, что были некоторые проблемы с его использованием, потому что изменения, в том числе приведение всех установщиков в свободное состояние, не были перенесены в среду preprod. Как жаль, что я этого не увидел … все новые изменения присутствовали в среде preprod, кроме этих. Спасибо всем.
Может быть setIsValid
не возвращайся $this
другой объект?