Как получить значение поля формы через класс формы в symfony2?

Я хотел бы знать, как получить значение поля формы через класс формы в symfony2. Объяснение как ниже:

Это код класса сущности:

    <?php

namespace Ikproj\HomeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* User
*
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="Ikproj\HomeBundle\Entity\UserRepository")
*/
class User
{
/**
* @var integer
*
* @ORM\Column(name="id_user", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;

/**
* @var string
*
* @ORM\Column(name="username", type="string", length=255)
*/
private $email;

/**
* @var string
*
* @ORM\Column(name="pseudo", type="string", length=255)
*/
private $pseudo;

/**
* @var string
*
* @ORM\Column(name="password", type="string", length=255)
*/
private $passWD;

/**
* @var string
*
* @ORM\Column(name="sexeuser", type="string", length=255)
*/
private $sexeuser;

/**
* @var \DateTime
*
* @ORM\Column(name="dateanniv", type="date")
*/
private $dateanniv;/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set name
*
* @param string $name
* @return User
*/
public function setName($name)
{
$this->name = $name;

return $this;
}

/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}

/**
* Set email
*
* @param string $email
* @return User
*/
public function setEmail($email)
{
$this->email = $email;

return $this;
}

/**
* Get email
*
* @return string
*/
public function getEmail()
{
return $this->email;
}

/**
* Set pseudo
*
* @param string $pseudo
* @return User
*/
public function setPseudo($pseudo)
{
$this->pseudo = $pseudo;

return $this;
}

/**
* Get pseudo
*
* @return string
*/
public function getPseudo()
{
return $this->pseudo;
}

/**
* Set passWD
*
* @param string $passWD
* @return User
*/
public function setPassWD($passWD)
{
$this->passWD = $passWD;

return $this;
}

/**
* Get passWD
*
* @return string
*/
public function getPassWD()
{
return $this->passWD;
}

/**
* Set sexeuser
*
* @param string $sexeuser
* @return User
*/
public function setSexeuser($sexeuser)
{
$this->sexeuser = $sexeuser;

return $this;
}

/**
* Get sexeuser
*
* @return string
*/
public function getSexeuser()
{
return $this->sexeuser;
}

/**
* Set dateanniv
*
* @param \DateTime $dateanniv
* @return User
*/
public function setDateanniv($dateanniv)
{
$this->dateanniv = $dateanniv;

return $this;
}

/**
* Get dateanniv
*
* @return \DateTime
*/
public function getDateanniv()
{
return $this->dateanniv;
}
}

И это код класса формы (конструктор форм):

    <?php

namespace Ikproj\HomeBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class UserprofilechangeType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('sexeuser', 'text');
$def = $builder->add('sexeuser', 'text');
}

/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Ikproj\HomeBundle\Entity\User'
));
}

/**
* @return string
*/
public function getName()
{
return 'ikproj_homebundle_user';
}
}

На самом деле, я хотел бы знать, как поместить значение поля «sexeuser» в переменную $def, Другими словами, как мне изменить эту строку $def = $builder->add('sexeuser', 'text'); чтобы получить значение поля sexeuser?

0

Решение

Вам необходимо динамически изменить форму, используя события формы:

В этом случае все происходит перед загрузкой данных в форму (PRE_SET_DATA)

// src/Acme/DemoBundle/Form/Type/FriendMessageFormType.php
namespace Acme\DemoBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class FriendMessageFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('subject', 'text')
->add('body', 'textarea');
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) {
$data = $event->getData();
var_dump($data);die;
}
);
}

public function getName()
{
return 'acme_friend_message';
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
}
}

http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html

1

Другие решения

Других решений пока нет …