Неизвестная «rootform» тестовая форма рендеринга в PHP - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь заставить Symfony Forms (с Twig Bridge), Slim и Twig хорошо играть вместе, но не могу добиться успеха. Из того, что я вижу, у меня есть аспект формы работы: в том, что форма создана, метод createView() делает как надо, и я могу сместить его в шаблон Twig и использовать {{ dump(form) }}, чтобы увидеть, что все идет как и должно быть оттуда.

У меня есть фактор, который создает соответствующие вещи для рендеринга форм в Twig и устанавливает шаблон по умолчанию и т. Д. - все это, кажется, работает, но по какой-то причине, когда я повторяю и рендеринг формы, я получаю следующую ошибку :

Type: Twig_Error_Syntax
Message: Unknown "rootform" test.
File: /var/www/mulligan/vendor/symfony/twig-bridge/Resources/views/Form/form_div_layout.html.twig
Line: 22

Я проверил, чтобы убедиться, что FormExtension загружается и работает, и он определяет функции тестирования и т. Д. (Одна из которых - rootform), и все, кажется, работает нормально. Это в основном Фактор, который я использую, чтобы определить FormFactory (и обрабатывать вещи Twig по мере необходимости):

    /**
     * @return FormFactoryInterface|null
     * @throws \ReflectionException
     */
    public function initialiseFactory(): ?FormFactoryInterface
    {
        $csrfGenerator = new UriSafeTokenGenerator();
        $csrfStorage   = new NativeSessionTokenStorage();
        $csrfManager   = new CsrfTokenManager($csrfGenerator, $csrfStorage);

        $defaultFormTheme          = 'form_div_layout.html.twig';
        $appVariableReflection     = new ReflectionClass(AppVariable::class);
        $vendorTwigBridgeDirectory = \dirname($appVariableReflection->getFileName());
        $viewsDirectory            = PROJECT_ROOT . '/templates/form';

        $twig = $this->getTwigView();

        $twigEnv       = new Environment(new FilesystemLoader([
            $viewsDirectory,
            $vendorTwigBridgeDirectory . '/Resources/views/Form'
        ]));
        $formEngine = new TwigRendererEngine([$defaultFormTheme], $twigEnv);

        $twig->getEnvironment()->addRuntimeLoader(new FactoryRuntimeLoader([
            FormRenderer::class => function () use ($formEngine, $csrfManager) {
                return new FormRenderer($formEngine, $csrfManager);
            }
        ]));

        $twig->addExtension(new FormExtension());

        $validator = Validation::createValidator();

        // Set up the Form component
        $formFactory = Forms::createFormFactoryBuilder()
                            ->addExtension(new HttpFoundationExtension())
                            ->addExtension(new CsrfExtension($csrfManager))
                            ->addExtension(new ValidatorExtension($validator))
                            ->getFormFactory();

        $this->setFactory($formFactory);

        return $this->getFactory();
    }

Есть ли у кого-нибудь мысли о том, чего мне не хватает, или о том, что, возможно, не удалось инициализировать при этом - я бы обычно не использовал формы Symfony и т. Д., Поэтому не уверен, где может быть проблема.

Примечание: composer.json для версий и т. Д .:

    "slim/slim": "^3.11",
    "slim/php-view": "2.1.*",
    "symfony/form": "^4.2",
    "symfony/security-csrf": "^4.2",
    "symfony/twig-bridge": "^4.2",
    "symfony/validator": "^4.2",
    "symfony/http-foundation": "^4.2",
    "slim/twig-view": "^2.4"

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

...