Symfony 3.3 CraueFormFlowBundle Request_stack пуст

мой первый вопрос к этому сайту немного сложно описать. Я новичок в Symfony, начал с 3.2 и недавно обновился до 3.3.5 (не уверен, что это актуально для проблемы). Я пытался использовать CraueFormFlowBundle (многошаговый пакет форм), но не могу заставить его работать. Проблема в том, что попытка доступа к потоку приводит к исключению:

Error: Call to a member function getCurrentRequest() on null

Symfony\Component\Debug\Exception\ FatalErrorException
in vendor/craue/formflow-bundle/Form/FormFlow.php (line 191)

Строка 191 показывает: $currentRequest = $this->requestStack->getCurrentRequest();

Изменение FormFlow.php с помощью строки дампа показывает, что $this->requestStack имеет значение null. У меня недостаточно знаний об этом комплекте, чтобы знать, с чего начать поиск проблемы.

Определение потока основано на примере местоположения:

namespace EngineeringBundle\Form;

use Craue\FormFlowBundle\Form\FormFlow;
use Craue\FormFlowBundle\Form\FormFlowInterface;

class SelectExaminationFlow extends FormFlow
{

    /**
     * {@inheritDoc}
     */
    protected function loadStepsConfig()
    {
        dump("loadStepsConfig");
        return array(
            array(
                'label' => 'engineering.discipline',
                'form_type' => new SelectExaminationStep1Form(),
            ),
            array(
                'label' => 'engineering.date',
                'form_type' => new SelectExaminationStep2Form(),
                        'skip' => function($estimatedCurrentStepNumber, FormFlowInterface $flow) {
                            return $estimatedCurrentStepNumber > 1 && !$flow->getFormData()->canHaveRegion();
                        },
            ),
            array(
                'label' => 'confirmation',
            ),
        );
    }

Определение формы тоже довольно простое и работает без проблем:

class SelectExaminationStep1Form extends AbstractType 
{
    public function buildForm(FormBuilderInterface $builder, array $options) 
  {
    dump("buildForm");
        $builder
      ->add('id', HiddenType::class)
      ->add('discipline', EntityType::class, array(
              'class' => 'EngineeringBundle:Discipline',
              'choice_label' => 'disciplineName',
              'label' => 'engineering.discipline.label'
              )
           );
    }

    public function getName() {
        return $this->getBlockPrefix();
    }

    public function getBlockPrefix() {
        return 'createEngineeringStep1';
    }

}

services.yml:

EngineeringBundle\Form\SelectExaminationFlow:
    parent: craue.form.flow
    autowire: false
    autoconfigure: false
    public: true

engineering.form_flow:
    alias: EngineeringBundle\Form\SelectExaminationFlow
    public: true

Контроллер:

/**
 * @Route("create", name="engineering_create")
 */
public function createAction()
{
    return $this->processFlow(new ExaminationDate(), $this->get('engineering.form_flow'));

}

заранее спасибо

Себастьян


person Sebastian Mery    schedule 03.08.2017    source источник
comment
Не могу добавить поздравление в пост, видимо не сохранился. Простите за это...   -  person Sebastian Mery    schedule 03.08.2017


Ответы (1)


У меня была такая же проблема, я решил ее, добавив конструктор в vendor/craue/formflow-bundle/Form/FormFlow.php со следующим содержимым:

public function __construct(RequestStack $requestStack, FormFactoryInterface $formFactory, DataManagerInterface $dataManager, EventDispatcherInterface $eventDispatcher) {
    $this->formFactory = $formFactory;
    $this->requestStack = $requestStack;
    $this->dataManager = $dataManager;
    $this->eventDispatcher = $eventDispatcher;
}

Обязательно поместите его после всех сеттер-методов. Проблема, кажется, связана с обновлением symfony.

person Stuffy    schedule 23.10.2017
comment
Привет, Stuffy, я изменил свои требования, и поэтому проблема устарела, но тем не менее спасибо. Я приму ответ для всех остальных с той же проблемой. - person Sebastian Mery; 14.11.2017