我使用Silex和Symfony2 Form组件。我尝试从页面上第一个条目的表单对象中获取默认值,因此在用户发送表单之前。我试着这样做:
$query = $form->getData();
但是在发送表单之前它是空的。另一方面,这有效:
$form->get('searchRadius')->getData()
它显示默认值。是否可以在不发送表单的情况下使getData()方法工作?或者是否有其他方法可以从我不知道的表单中获取默认值?
提前致谢。
修改
我的问题不够明确,所以我会尝试修复它。
我有一个控制器。在这个控制器中,我创建了一个带有一些默认值的表单现在我尝试使用$form->getData()
获取这些值但它什么都不返回。另一方面,当我尝试访问其子项(即表单字段)并请求像$form->get('searchRadius')->getData()
这样的数据时,它确实返回默认值。但我想避免让每个孩子分别获得默认值。我想询问发送时的表格。
我想在控制器中执行以下操作:
$form = $this->createForm();
$defaultValues = $form->getData();
感谢您的时间和提示。
答案 0 :(得分:0)
您是否按表格处理当前请求?尝试先处理请求,然后检查表单是否有效:
$form->handleRequest($request);
$data = $form->getData();
var_dump($data['searchRadius']);
if ($form->isValid()) {
// do something...
}
答案 1 :(得分:0)
不确定表单的默认值是什么意思。但是在Symfony中,您可以在服务器中创建表单,然后在网页中显示它们。查看文档here如果您这样做,可以根据需要将值分配给表单的字段。
另一方面,如果您直接在html中创建表单,服务器在提交之前不会知道它们。在这种情况下,服务器只能看到变量及其值,具体取决于发送的内容。因此,如果您的输入文本在html中分配了一些值,并且用户更改了它,您将无法从表单中检索它(除非您开始使用此“默认值”值创建额外的隐藏字段)。
答案 2 :(得分:0)
当然,您不必使用$form->getData();
来获取实体/模型对象。您可以先实例化它们,然后将它们传递给表单对象,如下所示:
$formType = new \My\Bundle\Form\Type\SomeType();
$formModel = new \My\Bundle\Form\Model\SomeModel();
$form = $this->createForm($formType, $formModel);
您可以使用对象的getter访问实体/模型的属性,如下所示:
$formModel->getSomeProperty();
目前尚不清楚您在上面的示例中遇到了什么,但所有$form
对象都会简化表单的呈现和验证。
注意:在上面的示例中,$form->getData();
和$form->get('searchRadius')->getData();
不是一回事。后者是前者的孩子,所以它是一个级别(即嵌套形式)。
答案 3 :(得分:0)
我假设你想在用户启动get时为这种情况生成一些默认值 请求并首次进入表单提交视图。
在这种情况下,您必须为表单提供一些默认值 - 这是一个简单的示例:
$app->get('/form', function() use ($app) {
// default data for the form !!!
$defaultData = array(
'name' => 'Your name',
'email' => 'Your email'
);
$form = $app['form.factory']->createBuilder('form', $defaultData)
->add('name')
->add('email')
->add('password')
->add('gender', 'choice', array(
'choices' => array(1 => 'male', 2 => 'female'),
'expanded' => true
))
->getForm();
$rootGetData = print_r($form->getData(), true);
$nameGetData = print_r($form->get('name')->getData(), true);
$passwordGetData = print_r($form->get('password')->getData(), true);
return new Response('root form data is:<pre>' . $rootGetData . '</pre>'
. 'name form data is:<pre>' . $nameGetData . '</pre>'
. 'password form data is:<pre>' . $passwordGetData . '</pre>');
});
以下是我在浏览器中获得的结果:
root form data is:
Array
(
[name] => Your name
[email] => Your email
)
name form data is:
Your name
password form data is:
!!! NO VALUE FOR PASSWORD !!!
因此,在创建表单(实现 Symfony \ Component \ Form \ FormInterface 的某个对象)时,您始终必须提供一些默认数据。请注意,使用$form->get('password')->getData()
获取数据的方式在示例中不起作用。我没有得到任何结果。那是因为当我们创建表单时,我们没有为password属性传递任何值。您应确保正确传递默认值以使用getData()
。
表单对象通常由 FormFactory 或 FormBuilder 创建。如果查看创建实际表单实例的方法,则始终存在mixed $data = null
参数。如果是 FormBuilder ,则数据将使用方法createBuilder
传递(如上例所示)。