gpt4 book ai didi

forms - Symfony2 Twig 扩展 : Creating form

转载 作者:行者123 更新时间:2023-12-04 06:00:32 26 4
gpt4 key购买 nike

我想要一个可以在不同页面和模板上重复使用的联系表单 block 。所以我决定写一个 Twig 扩展。问题是我无法访问 createFormBuilder() 函数。第二个问题是我无法访问请求对象进行验证。我当前的代码如下所示:

<?php

namespace Name\NameBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class ContactExtension extends \Twig_Extension
{
function getName() {
return 'contact_extension';
}

function getFunctions() {
return array(
'contactform' => new \Twig_Function_Method($this, 'contactform'),
);
}

function contactform() {
$form = $this->createFormBuilder()
->add('Name', 'text')
->add('Message', 'textarea')
->add('Send', 'submit')
->getForm();

return $this->render('NameBundle:forms:contactform.html.twig', array(
'form' => $form->createView(),
}
}

但我得到错误“调用未定义的方法 createFormBuilder()”...

此外,如果我将函数更改为 function contactform(Request $request) { ... }

,我也会收到错误消息

我需要添加什么才能使用此功能的对象?或者也许 Twig 扩展是完全错误的方法?

最佳答案

createFormBuilder() 是一个 Controller允许您通过容器访问 Controller 内的 form.factory 服务的助手(代码如下)

namespace Symfony\Bundle\FrameworkBundle\Controller;
// ...
class Controller extends ContainerAware
{
// ...
public function createFormBuilder($data = null, array $options = array())
{
return $this->container->get('form.factory')->createBuilder('form', $data, $options);
}

这里您处于“Controller context”中,因此如果您想在您的扩展中使用form.factory 服务,您必须注入(inject)它

但是,

我不会建议您以这种方式(使用 Twig 扩展功能)管理您的 contactForm。为什么不在适当的 Controller 中创建一个 contactAction。然后,您可以使用 twig render 帮助程序在模板中呈现您的表单,

{{ render(controller('YourBundle:YourController:contactAction')) }} 

关于forms - Symfony2 Twig 扩展 : Creating form,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20661670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com