Forms Symfony2表单实体类参数
我的表单实体中需要一个id值,但我找不到从控制器获取它的方法。 我尝试了很多选择,但没有成功,我也到处搜索。 以下是控制器代码:Forms Symfony2表单实体类参数,forms,symfony,parameters,controller,entity,Forms,Symfony,Parameters,Controller,Entity,我的表单实体中需要一个id值,但我找不到从控制器获取它的方法。 我尝试了很多选择,但没有成功,我也到处搜索。 以下是控制器代码: public function addClientAction(Request $request, $idSocietate) { $societate = $this->getSocietate($idSocietate); //$locatii = $this->getLocatii(); $client = ne
public function addClientAction(Request $request, $idSocietate)
{
$societate = $this->getSocietate($idSocietate);
//$locatii = $this->getLocatii();
$client = new Clienti();
$dateClienti = new DateClienti();
$client->getDateClienti()->add($dateClienti);
$form = $this->createForm(new FormClientiType($idSocietate), $client);
$request = $this->get('request');
if ($request->getMethod() == 'POST') {
$form->bind($request);
if ($form->isValid()) {
// Persist objects to database
$usr = $this->get('security.context')->getToken()->getUser();
$em = $this->getDoctrine()
->getManager();
$client->setAdaugatDe($usr->getUsername());
$client->setSocietati($societate);
$em->persist($client);
$em->flush();
$this->get('session')->getFlashBag()->set('form-notice', 'Client adaugata cu succes.');
// Redirect - This is important to prevent users re-posting
// the form if they refresh the page
return $this->redirect($this->generateUrl('clienti_adauga', array('idSocietate' => $idSocietate)));
}
}
以下是表单实体类:
<?php
// src/Blogger/BlogBundle/Form/EnquiryType.php
namespace Mnv\CoreBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class FormClientiType extends AbstractType
{
private $idSocietate;
public function __construct($idSocietate) {
$this->idSocietate = $idSocietate;
var_dump($idSocietate); exit;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Mnv\CoreBundle\Entity\Clienti',
'cascade_validation' => true,
'idSocietate' => $this->idSocietate,
));
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('cod','text', array('required' => false));
$builder->add('denumire','text', array('required' => true));
$builder->add('cod_fiscal','text', array('required' => true));
$builder->add('cont_analitic','text', array('required' => false));
$builder->add('telefon','text', array('required' => false));
$builder->add('email','email', array('required' => false));
$builder->add('judet','text', array('required' => false));
$builder->add('adresa','text', array('required' => false));
$builder->add('nr_reg_comertului','text', array('required' => false));
$builder->add('cont','text', array('required' => false));
$builder->add('banca','text', array('required' => false));
$builder->add('delegat','text',array('required' => false));
$builder->add('delegat_serie_ci','text',array('required' => false));
$builder->add('delegat_nr_ci','text',array('required' => false));
$builder->add('delegat_ci_eliberat','text',array('required' => false));
$builder->add('delegat_mij_transport','text',array('required' => false));
$builder->add('agent','text',array('required' => false));
$builder->add('discount','text',array('required' => false));
$builder->add('date_clienti', 'collection', array(
'type' => new FormDateClientiType($options['idSocietate']),
'cascade_validation' => true,
'prototype' => true,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'required' => false,
));
$builder->add('adauga','submit');
}
public function getName()
{
return 'form_clienti';
}
编辑:解决方案:
public function buildForm(FormBuilderInterface $builder, array $options)
{
// this was it :)
$idSocietate = $options['data']->getSocietati()->getIdSocietate();
$builder->add('cod','text', array('required' => false));
$builder->add('denumire','text', array('required' => true));
$builder->add('cod_fiscal','text', array('required' => true));
$builder->add('cont_analitic','text', array('required' => false));
$builder->add('telefon','text', array('required' => false));
$builder->add('email','email', array('required' => false));
$builder->add('judet','text', array('required' => false));
$builder->add('adresa','text', array('required' => false));
$builder->add('nr_reg_comertului','text', array('required' => false));
$builder->add('cont','text', array('required' => false));
$builder->add('banca','text', array('required' => false));
$builder->add('delegat','text',array('required' => false));
$builder->add('delegat_serie_ci','text',array('required' => false));
$builder->add('delegat_nr_ci','text',array('required' => false));
$builder->add('delegat_ci_eliberat','text',array('required' => false));
$builder->add('delegat_mij_transport','text',array('required' => false));
$builder->add('agent','text',array('required' => false));
$builder->add('discount','text',array('required' => false));
$builder->add('date_clienti', 'collection', array(
'type' => new FormDateClientiType($idSocietate),
'cascade_validation' => true,
'prototype' => true,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'required' => false,
));
$builder->add('adauga','submit');
}
}
也许您正试图将null传递给构造函数方法
我还建议您通过选项数组传递$idSocietate,而不是通过构造函数。选项数组是createForm方法的第三个参数。您可以使用$resolver将该选项设置为所需选项。我尝试过,但没有成功。你能给我举个例子吗?首先谢谢你!我找到了解决办法,而且很简单。我不知道有时我是愚蠢还是懒惰:)我需要的东西已经在那里了,我可以拿了。您的回答非常有用,在我将$options数组转储之后,我看到了它:)这里是:$idSocietate=$options['data']->getSocietati()->getIdSocietate();很高兴我能帮忙。记住使用表单选项,而不是通过构造函数传递变量-它有时会阻止您将表单作为服务提供,并且您不需要表单类中的额外属性。如果可行,好吧,但我还是觉得你的解决方案有点奇怪。我从未使用过$options['data'],如果对象具有您需要的id,请尝试使用$builder->getData()实现一个有效的解决方案。
public function buildForm(FormBuilderInterface $builder, array $options)
{
// this was it :)
$idSocietate = $options['data']->getSocietati()->getIdSocietate();
$builder->add('cod','text', array('required' => false));
$builder->add('denumire','text', array('required' => true));
$builder->add('cod_fiscal','text', array('required' => true));
$builder->add('cont_analitic','text', array('required' => false));
$builder->add('telefon','text', array('required' => false));
$builder->add('email','email', array('required' => false));
$builder->add('judet','text', array('required' => false));
$builder->add('adresa','text', array('required' => false));
$builder->add('nr_reg_comertului','text', array('required' => false));
$builder->add('cont','text', array('required' => false));
$builder->add('banca','text', array('required' => false));
$builder->add('delegat','text',array('required' => false));
$builder->add('delegat_serie_ci','text',array('required' => false));
$builder->add('delegat_nr_ci','text',array('required' => false));
$builder->add('delegat_ci_eliberat','text',array('required' => false));
$builder->add('delegat_mij_transport','text',array('required' => false));
$builder->add('agent','text',array('required' => false));
$builder->add('discount','text',array('required' => false));
$builder->add('date_clienti', 'collection', array(
'type' => new FormDateClientiType($idSocietate),
'cascade_validation' => true,
'prototype' => true,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'required' => false,
));
$builder->add('adauga','submit');
}
}