我是symfony2 ver 2.7中的新手: 我想在表单中创建注册号,其中包含现有表中计数行的数据。
我在PatientController中创建并以twig格式显示结果时没问题。 但我需要以文本类型的形式显示结果。我在PatientRepository中写了一个函数:
public function getNumberPatient()
{
$qb = $this->createQueryBuilder('name')
->select('COUNT(name)');
return (int)$qb->getQuery()
->getSingleScalarResult();
}
在我的Entity文件中生成如下:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('dateBirth', 'date', array(
'years' => range(date('Y'), date('Y', strtotime('-50 years'))),
'required' => TRUE,
))
->add('regCode', 'text', array(
'required' => TRUE,
'data' => function(PatientRepository $r){
return $r->getNumberPatient();
},
当我从PatientEntity调用此函数时,我遇到了麻烦。可能吗?
我确实创建了函数:
'query_builder' => function(PatientRepository $r){
return $r->getNumberPatient();
但是它会出错
The option "query_builder" does not exist. Defined options are: "action",
请帮帮我..
答案 0 :(得分:3)
有多种方法可以做到:
示例:
public function someAction()
{
$data = $em->getRepository(...)->getNumberPatient();
$form = $this->createForm(new MyFormType, NULL_OR_OBJECT, [
'text_data' => $data
]);
...
}
MyFormType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$data = $options['text_data'];
$builder
->add('regCode', 'text', ['data' => $data])
...
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['text_data' => null]);
}
示例:
class MyFormType extends AbstractType
{
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
// use it like $this->entityManager->...
}
$options
数组获取,如$entityManager = $options['entityManager']
,或者你甚至可以将entityManager传递给构造函数。Here你可以看到..