【发布时间】:2014-09-03 08:23:03
【问题描述】:
我有一个包含此内容的ExtraPerfilType Symfony2 表单(无关信息已删除):
class ExtraPerfilType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder
->add('estado', 'entity', array(
'class' => 'CommonBundle:SysEstado',
'property' => 'nombre',
'required' => true,
'label' => 'Estado',
'empty_value' => 'Seleccione un estado',
'attr' => array(
'class' => 'estados'
)
));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
array(
'data_class' => 'Sunahip\UserBundle\Entity\SysPerfil',
'intention' => 'extra_user_profile'
)
);
}
public function getName()
{
return 'extra_user_profile';
}
}
这是BasicDataController.php 上用于构建和显示表单的函数:
/**
* @Route("/basicdata", name="basicdata")
* @Template()
*/
public function basicDataAction()
{
$em = $this->getDoctrine()->getEntityManager();
$id = $this->getUser()->getId();
$entity = $em->getRepository('UserBundle:SysPerfil')->findOneBy(array("user" => $id));
$form = $this->createForm(new ExtraPerfilType(), $entity, array('action' => $this->generateUrl('basicdata-save')));
return array('entity' => $entity, 'form' => $form->createView());
}
在basicData.html.twig 我有这个HTML(无关信息已被删除):
{{ form_start(form, {'attr': {'id':'form_extra_perfil'}}) }}
{{ form_label(form.state) }} <span class="oblig">(*)</span>
{{ form_widget(form.state) }}
<select class="municipalities" name="municipalities" id="municipalities" disabled="disabled">
<option value="-1">-- Pick one --</option>
<span class="oblig">(*)</span>
</select>
<select class="parishes" name="parishes" id="parishes" disabled="disabled">
<option value="-1">-- Pick one --</option>
</select>
<select class="city" name="city" id="city" disabled="disabled">
</select>
<div><input type="submit" id="form_btttn" value="Guardar"></div>
{{ form_widget(form._token) }}
{{ form_errors(form) }}
{{ form_end(form) }}
最后我在处理数据和更新数据库记录的函数中有这个:
/**
* @Route("/basicdata/save", name="basicdata-save")
* @Method("POST")
*/
public function guardarAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$id = $this->getUser()->getId();
var_dump($request->get("extra_user_profile"));
die();
...
}
这是我的问题所在,因为var_dump 有这个:
array (size=12)
'estado' => string '7' (length=1)
'calle' => string 'asdasd' (length=6)
'apartamento' => string 'asdasdasd' (length=9)
'apartamento_no' => string 'asdasda' (length=7)
'referencia' => string 'sdasdas' (length=7)
'codigo_postal' => string 'asdasdas' (length=8)
'fax' => string 'dasdasd' (length=7)
'telefono_local' => string 'asdasdasd' (length=9)
'telefono_movil' => string 'asdasdasd' (length=9)
'correo_alternativo' => string 'sdsad@asd.com' (length=13)
'sitio_web' => string 'sadasdads' (length=9)
'_token' => string 'Wsfi7yJCrovMct-yphPuh_XRQcO4VRqBrcK1BZ89-jE' (length=43)
由于自治市、教区和城市不在ExtraPerfilType 表单中,因为它们是依赖组合,我使用 jQuery 手动填写它们,当然还咨询 DB 上的记录,它们不在请求中,那么我如何处理它们为了更新他们在记录中的价值观?我正在使用最新的 Symfony 2.5.1,有什么帮助或建议吗?
请求未正确处理
在意识到如何使用额外字段之后,我为更新 DB 中的记录而编写的函数无法处理 $request,我不知道它在哪里失败。这是函数:
/**
* @Route("/basic-data/update", name="basic-data-update")
* @Method("POST")
*/
public function updateAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$id = $this->getUser()->getId();
$entityProfile = $em->getRepository('UserBundle:SysPerfil')->findOneBy(array("user" => $id));
$formProfile = $this->createForm(new PerfilType(), $entityProfile);
$formProfile->handleRequest($request);
if ($formProfile->isValid()) {
$municipalities= $em->getRepository('CommonBundle:SysMunicipio')->findOneBy(array("id" => $request->get('municipios')));
$parishes = $em->getRepository('CommonBundle:SysParroquia')->findOneBy(array("id" => $request->get('parroquias')));
$city= $em->getRepository('CommonBundle:SysCiudad')->findOneBy(array("id" => $request->get('ciudades')));
$entityProfile->setMunicipio($municipalities);
$entityProfile->setParroquia($parishes );
$entityProfile->setCiudad($city);
$em->flush();
return $this->redirect($this->generateUrl('datos-basicos'));
}
else {
$errors = $this->getFormErrors($formProfile);
}
return new JsonResponse(array('status' => true, 'errors' => $errors));
}
这是结果:
{"status":true,"errors":{"persJuridica":[],"rif":[],"ci":[],"nombre":[],"apellido":[],"user":{"email":[],"password":[],"confirm":[]}}}
我如何从请求中删除这些字段,因为它们是以其他形式处理的?
PS:在某些部分,代码是西班牙语,因为这是软件要求,抱歉,我尝试将某些部分设置为英文,以便您理解
我找到了解决办法
别在意最新的编辑,我已经找到了解决方案:
$builder
->remove('persJuridica')
->remove('rif')
->remove('ci')
->remove('nombre')
->remove('apellido')
->remove('email')
->remove('password')
->remove('confirm')
....
【问题讨论】:
标签: php symfony symfony-forms