2012-08-11 61 views
0

我的應用北京時間運行,但是當我使用自定義表單,字段類型(shtumi_daterange),如:如何在Silex/Twig中註冊自定義表單字段類型?

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,我發現這個例子如何註冊自定義表單字段類型,但我不能改變這個把它與硅石運行:

services: 

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

回答

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提及。

+0

謝謝 - 我喜歡這甚至比使用字符串更多。 – Benjamin 2012-08-17 17:15:29

3

我通過擴展FormServiceProvider來實現此目的。

use Symfony\Component\Form\FormFactoryInterface; 

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

    return $factory; 
}); 
+2

addType()從版本2.1開始已棄用,並將在2.3中刪除。相反,請在相關注入容器中使用表單擴展或類型註冊。 – Damien 2013-11-29 15:37:39

+0

請參閱http://silex.sensiolabs.org/doc/providers/form.html#usage – CSchulz 2014-03-14 18:45:56

相關問題