Symfony2自定义表单字段

3

我很新于Symfony,所以我的问题可能看起来有些简单,但我需要帮助。

我已经生成了一个新的bundle。

我在Me\MyBundle\Resources\config\routing.yml中添加了一个新的路由:

my_homepage:
    pattern:  /
    defaults: { _controller: MeMyBundle:Default:index }

捆绑控制器在简单情况下看起来像这样:

namespace Me\MyBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{
    public function indexAction()
    {
        $form = $this->createFormBuilder()
            ->getForm()
        ;
        return $this->render('MeMyBundle::index.html.twig', array(
            'form'        => $form->createView(),
            'param1'      => 'some_string_1',
            'param2'      => 'another string',
        ));
   }
}

在twig模板中,我可以读取和处理想要的正确参数。整个操作发生在生成的表单中,其中有AJAX请求路由到另一个控制器。我想要实现的是创建一个新的自定义表单字段,在同一表单中可以多次重复使用,并具有不同的参数。例如,我希望我的indexAction()看起来像这样:
    public function indexAction()
    {
        $paramsArr_1 = array(
            'param1'      => 'some_string_1',
            'param2'      => 'another string',
        );
        $paramsArr_2 = array(
            'param1'      => 'some_string_2',
            'param2'      => 'another fine string',
        );
        $form = $this->createFormBuilder()
            ->add(myCustomField, $paramsArr_1)
            ->add(myCustomField_2, $paramsArr_2)
            ->getForm()
        ;
        return $this->render('MeMyBundle::index.html.twig', array(
            'form'        => $form->createView()
        ));
   }

是的,我看到过这篇文章,但是它并没有对我有太大帮助。我无法使它正常工作。

非常感谢任何帮助。


我无法让它正常工作。如果您不提供更多有关问题的信息,我们将无法帮助您。 - A.L
这篇文章也许有所帮助:http://www.webtipblog.com/create-a-custom-form-field-type-in-symfony-2/ - joe42
@n.1 我尝试按照那篇文章的步骤操作,但是它写得非常简洁,我的解决方案导致了很多错误,我无法修复。现在我已经撤销了所有更改。我不想让任何人为我写这个。我想,也许有一些更好的教程或另一个带有自定义表单字段的示例,我可以查看、比较或跟随。 - mkas
谢谢@joe42,看起来很不错。我会尝试遵循这篇文章的指导。 - mkas
让我理解一下...你需要将从Ajax调用返回的新表单添加到现有表单中?无论如何,你都需要使用javascript/jquery在渲染后将这个新表单添加到你的视图中...像append和html这样的jquery函数非常有用。 - Diego Favero
1
你必须创建一个自定义表单字段类型。在自定义字段类型中,您可以控制呈现过程和提交过程。如果您想使用ajax请求器,则可以修改buildView(渲染过程),并为自己的字段类型创建小部件,在小部件中,您可以编写任何JS脚本、html标记等... - ZhukV
1个回答

0
据我所知,表单字段扩展了基本表单类,因此您的“myCustomField”实际上可以是另一个表单。
请查看:http://symfony.com/doc/current/reference/forms/types/form.html 正如您所知,每个表单对象都附有一个对象。因此,您可以创建一个新对象,并将这些值设置在其中,然后使用包含不同数据的对象添加该表单多少次都可以。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接