簡體   English   中英

在非symfony應用程序中渲染symfony / form

[英]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 ,它使用了PhpEngineTwigEngine

\\Symfony\\Bridge\\Twig\\Extension\\FormExtension 詳細記錄 ,但是我缺少的是php設置。 這就是我這樣做的方式:

new \Symfony\Component\Form\Extension\Templating\TemplatingExtension($phpEngine, $this->csrfManager());

您能指出我想念的是什么還是我的設置有什么問題?

我認為最簡單的方法是將Symfony 3.3標准版安裝在您的應用程序旁邊(在Symfony Flex發行之前)。

之后,找到一種將Symfony的路由器與您的應用程序的路由器一起使用的方法。

因此,您可以擁有完整的Symfony框架,在其中創建表單類型,然后讓Symfony呈現它:

  1. 用ajax調用
  2. 在舊版應用中使用新的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM