如何从选择字段Symfony获取数据



大家好,我有问题。我需要从由实体类填充的选择字段中获取数据。

这是我的实体:它是带有月份和第一天和最后一天的字典。

实体

namespace accountantReportBundleEntity;
use DoctrineORMMapping as ORM;
/**
* @ORMEntity
*/
class Calendar
{
/**
* @var integer
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="month", type="string", length=255)
*/
private $month;
}

我将夹具加载到此表中到db并创建formBuilder:

表单类型

class ReportFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('month','entity', array(
'class' => 'ReportBundle:Calendar',
'property' => 'month',
'expanded' => false,
'multiple' => false
));
}
}

现在我想获取从选定月份到的数据,但$datanull

控制器

/**
* @Route("/report", name="report")
* @Template()
*/
public function indexAction(Request $request)
{
$form = $this->createForm(new ReportFormType());
$form->handleRequest($request);
$data = $form->getData();
var_dump($data);    // $data is null!       
return array('form' => $form->createView());
}

树枝

<form method="get" action="{{ path('report') }}">
<div class="form-group">
{{ form_row(form.month, {'label': 'Select Month:', 'attr': {'class': 'form-control'}}) }}
</div>
<div class="form-group">
<input type="submit" value="Show Report" class="btn btn-warning btn-block"/>
</div>
</form>

更新 1

我添加了"data_class",但我仍然得到 NULL。

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('month','entity', array(
'class' => 'ReportBundle:Calendar',
'choice_label' => 'month',
'expanded' => false,
'multiple' => false,
));
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Calendar::class
));
}

这是我现在的控制器。

public function indexAction(Request $request)
{
$form = $this->createForm(new ReportFormType());
$form->handleRequest($request);
$data = $form->get('month')->getData();
// i check data
var_dump($data);
return array(
'form' => $form->createView());
}

更新 2

我解决了我的问题,我为此更改了模板中的表单:

<form method="post" action="{{ path('report') }}" novalidate="novalidate">
{{ form_errors(form) }}
<div class="form-group">
{{ form_row(form.month, {'label': 'Select month', 'attr': {'class': 'form-control'}}) }}
{{ form_rest(form) }}
</div>
<div class="form-group">
<input type="submit" value="Show report" class="btn btn-warning btn-block"/>
</div>

我将方法更改为post并添加form_rest

更改表单,如下所示:

use accountantReportBundleEntityCalendar;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
class ReportFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('month','entity', array(
'class' => 'ReportBundle:Calendar',
'property' => 'month',
'expanded' => false,
'multiple' => false
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class'=> Calendar::class,
));
}
}

请记住,命名空间部分的第一个字母是大写的(Accountant而不是accountant(。

更新

根据OP的评论,您可能会在控制器中获得month数据:

交响乐

2
public function indexAction(Request $request)
{
// ...
$data = $form->get('month')->getData();
// ...
}

Symfony 3 & 4

public function indexAction(Request $request)
{
// ...
$data = $form['month']->getData();
// ...
}

最新更新