Я пытаюсь заставить 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"
спасибо заранее