我想在表单提交后,为表单隐藏的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')
检索它们?
答案 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欧洲/伦敦"。