[英]rendering symfony/form in non-symfony application
我正在嘗試將“自定義框架”應用程序重寫為Symfony,但是我無法一次完成所有操作,因此將過程分為多個步驟。
重要提示-我已經實現了symfony/templating
組件和symfony/twig-bridge
組件。
這就是我要在模板中輸出表單的方式:
<?php echo $view['form']->form($form) ?>
在執行此操作時,將引發以下錯誤:
Symfony\Component\Form\Exception\LogicException
No block "form" found while rendering the form.
/var/www/html/vendor/symfony/form/FormRenderer.php on line 98
為了渲染模板,我使用了DelegatingEngine
,它使用了PhpEngine
和TwigEngine
。
用\\Symfony\\Bridge\\Twig\\Extension\\FormExtension
詳細記錄 ,但是我缺少的是php設置。 這就是我這樣做的方式:
new \Symfony\Component\Form\Extension\Templating\TemplatingExtension($phpEngine, $this->csrfManager());
您能指出我想念的是什么還是我的設置有什么問題?
我認為最簡單的方法是將Symfony 3.3標准版安裝在您的應用程序旁邊(在Symfony Flex發行之前)。
之后,找到一種將Symfony的路由器與您的應用程序的路由器一起使用的方法。
因此,您可以擁有完整的Symfony框架,在其中創建表單類型,然后讓Symfony呈現它:
我找到了答案:
我使用了錯誤的FormRendererEngineInterface
。 我沒有依靠\\Symfony\\Component\\Form\\Extension\\Templating\\TemplatingExtension
類,而是由我自己注冊了form
幫助程序:
$phpEngine = new PhpEngine(new TemplateNameParser(), new FilesystemLoader(realpath(__DIR__.'/../Template').'/%name%'));
$twigEngine = new TwigEngine($this->twig(), new TemplateNameParser());
$this->TemplateEngine = new DelegatingEngine(array(
$phpEngine,
$twigEngine,
));
$phpEngine->addHelpers(array(
new FormHelper(new FormRenderer($this->twigFormRendererEngine())),
));
如您在TemplatingEngine中所看到的:
public function __construct(PhpEngine $engine, CsrfTokenManagerInterface $csrfTokenManager = null, array $defaultThemes = array())
{
$engine->addHelpers(array(
new FormHelper(new FormRenderer(new TemplatingRendererEngine($engine, $defaultThemes), $csrfTokenManager)),
));
}
它依賴於TemplatingRendererEngine
,而我需要的TwigRendererEngine
實例,作為表單模板是樹枝文件。
如果我的解釋是錯誤的,請糾正我,但是解決方案有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.