如何在Silex / Twig中注册自定义表单字段类型?

时间:2012-08-11 14:41:57

标签: symfony twig silex

我的应用程序正在运行,但当我使用自定义Form-Field-Type(shtumi_daterange)时:

public function buildForm(\Symfony\Component\Form\FormBuilderInterface $builder, array $options)
{
    $dateRange4 = new DateRange('m/d/Y');
    $dateRange4->parseData('03/27/2012 - 04/05/2012');
    $builder->add('builddate', "shtumi_daterange", array('required'=>false, 'default'=>$dateRange4));
}

发生此错误:

Uncaught exception 'Symfony\Component\Form\Exception\FormException' with 
message 'Could not load type "shtumi_daterange"' in 
../vendor/symfony/form/Symfony/Component/Form/FormRegistry.php:95

我想,我需要这样的东西:

<?php
$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path'        => $path_ext_dir_abs . '/views',
'twig.form.templates' => array('form_div_layout_custom.html.twig'),
    'form.type.shtumi_daterange' => 'Shtumi\UsefulBundle\Form\Type\DateRangeType',
));

但我不知道/找到合适的symtax​​!

symfony documentation,我发现这个例子如何注册一个自定义表单字段类型,但我无法对其进行转换以使其与silex一起运行:

services:

  form.type.gender:
      class: Acme\DemoBundle\Form\Type\GenderType
      arguments:
          - "%genders%"
      tags:
          - { name: form.type, alias: gender }

2 个答案:

答案 0 :(得分:3)

我通过扩展FormServiceProvider来实现这一目标。

use Symfony\Component\Form\FormFactoryInterface;

$app->extend('form.factory', function (FormFactoryInterface $factory) {
    $factory->addType(new MyType());

    return $factory;
});

答案 1 :(得分:1)

您无需注册即可使用它。您可以将新实例作为add的第二个参数传递:

use Shtumi\UsefulBundle\Form\Type\DateRangeType;
/* ... */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $dateRange4 = new DateRange('m/d/Y');
    $dateRange4->parseData('03/27/2012 - 04/05/2012');
    $builder->add('builddate', new DateRangeType(), array('required'=>false, 'default'=>$dateRange4));
}

document you linked中提到了它。