Symfony 2.7。如何在表单提交后获取/设置表单字段的值?

时间:2015-12-15 19:12:32

标签: php forms symfony

我想在表单提交后,为表单隐藏的datetime元素设置值(unix timestamp),Symfony 2.7。

$starttimeStr=$form->get('meetingbundle_event[starttimeStr]');// here i intend to get user input for the date in string format
$dateObj = new \Datetime($starttimeStr); 
$starttimeInt=$dateObj->getTimestamp();
$form->get('meetingbundle_event[starttimeInt]')->setData($starttimeInt); //here i want to set  the datetime in decimal format

但是这不起作用,因为不能接受id meetingbundle_event_starttime,也不接受名称meetingbundle_event[starttimeStr]作为FormInterface的get(string $name}的有效参数: http://api.symfony.com/3.0/Symfony/Component/Form/FormInterface.html 我通过使用Tools->知道名字和id。 WebDeveloperExtension-> Forms-> Firefox中的DisplayFormDetails。

因此我尝试$elem=$form->all();来查看我的表单元素的名称,但我看不到结果:

print_r($elem); // crashes web-browser
$fs->dumpFile('C:\Bitnami\wampstack-5.5.30-0\sym_prog\proj2_27\form.txt', $elem ); */ Complains that there is no memory

$elemser=  serialize($elem); //gives error that  php can not serialize Closure

$elemjson = json_encode($elem);
$fs->dumpFile('C:\Bitnami\wampstack-5.5.30-0\sym_prog\proj2_27\form.txt', $elemjson ); // outputs empty strings

表单字段的默认命名规则是什么,我可以使用$form->get('field_name')检索它们?

3 个答案:

答案 0 :(得分:1)

要使用$form->getData()['%element_name%']来获取元素值 据我所知,通过调用$form->setData()无法更改提交的表单元素值。因此,如果您想更改表单中的提交表单元素值,请使用FormBuilder方法addViewTransformer http://symfony.com/doc/current/cookbook/form/data_transformers.html或在表单事件侦听器http://symfony.com/doc/current/components/form/form_events.html中执行此操作。

答案 1 :(得分:0)

发现haw要获取表单的子项 - 使用FormType类中的名称(不是字段ID,也不是表单中的名称):

$starttimeStr=$form->get('starttimeStr'); //where starttimeStr is the corresponding name of the field in Form class "\src\Bundle\Form\EventType.php"

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('title', 'text', array(  'attr' => array( 'style' => 'width: 500px',), ) )
        ->add('keywords', 'text', array(  'attr' => array('style' => 'width: 500px',) ,) )
        ->add('starttime', 'hidden', array('data' => '0',) )
        ->add('endtime', 'hidden', array('data' => '0',) ) 
        ->add('starttimeStr') ...

但我仍然无法获得价值。 $starttimeStr似乎不是简单的输入日期字符串(21-12-2015),而是大型数组导致Firefox崩溃。

print_r($starttimeStr);// crashes Firefox.

$elemser=serialize('starttimeStr');
$fs->dumpFile('C:\Bitnami\wampstack-5.5.30-0\sym_prog\proj2_27\form.txt', $elemser ); // outputs empty string "s:12:"starttimeStr";"

答案 2 :(得分:0)

最后!一个人必须获得领域,而不是获取数据。官方文档中没有对此进行描述。

$ starttimeStr = $形式 - >获得(' starttimeStr') - >的getData();

的print_r($ starttimeStr); //提供用户输入" 21-12-2015 04:33欧洲/伦敦"。