でフォームを設定しようとしていSymfony 2
ます。
そこで、チュートリアルに従って、フォームを作成し、コントローラーの外部で検証プロセスを処理するための特別なクラスを作成しました (ドキュメントに示されているように)。
しかし、今はフィールドに自動的に入力する必要があります。(私の製品の) フォームが作成される ProductType.php で行う必要があると聞きました。
しかし、どうすればよいかわかりません。ここに ProductType.php の私の buildForm 関数があります:
class QuotesType extends AbstractType
{
private $id;
public function __construct($id){
$this->product_id = $id;
}
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('user_name', 'text')
->add('user_lastname', 'text')
->add('user_email', 'email')
->add('user_comments', 'textarea')
->add('user_product_id', 'hidden', array(
'data' => $this->product_id,
));
;
}
私のフィールドがnullであるというSQLエラーが発生したため、明らかに機能しません。
user_product_id にデフォルト値を設定するにはどうすればよいですか? オブジェクトに対して直接行う必要がありますか?
編集:
これが私のエンティティのコードの一部です:
namespace QN\MainBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* QN\MainBundle\Entity\Quotes
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="QN\MainBundle\Entity\QuotesRepository")
*/
class Quotes
{
public function __construct($p_id)
{
$this->date = new \Datetime('today');
}
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer $user_product_id
*
* @ORM\Column(name="user_product_id", type="integer")
*/
private $user_product_id = "1";
/**
* @var datetime $date
*
* @ORM\Column(name="date", type="datetime")
*/
private $date;
そして私のコントローラー:
public function requestAction($id)
{
$repository = $this->getDoctrine()
->getEntityManager()
->getRepository('QNMainBundle:Categories');
$categories = $repository->findAll();
$quote = new Quotes($id);
$form = $this->createForm(new QuotesType(), $quote);
$formHandler = new QuotesHandler($form, $this->get('request'), $this->getDoctrine()->getEntityManager());
if( $formHandler->process() )
{
return $this->redirect( $this->generateUrl('QNMain_Product', array('id' => $id)) );
}
return $this->render('QNMainBundle:Main:requestaform.html.twig', array(
'categories' => $categories,
'id' => $id,
'form' => $form->createView(),
));
}
私のハンドラー:
namespace QN\MainBundle\Form;
use Symfony\Component\Form\Form;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\EntityManager;
use QN\MainBundle\Entity\Quotes;
class QuotesHandler
{
protected $form;
protected $request;
protected $em;
public function __construct(Form $form, Request $request, EntityManager $em)
{
$this->form = $form;
$this->request = $request;
$this->em = $em;
}
public function process()
{
if( $this->request->getMethod() == 'POST' )
{
$this->form->bindRequest($this->request);
if( $this->form->isValid() )
{
$this->onSuccess($this->form->getData());
return true;
}
}
return false;
}
public function onSuccess(Quotes $quote)
{
$this->em->persist($quote);
$this->em->flush();
}
}
また、エンティティで設定しようとしているものもここに入れましたDate
。どちらの場合も機能させることができないため、何か間違ったことをする可能性があります..日付はbuildForm
関数にありません。すべきかどうかわかりません..