Php 使用createFormBuilder()预填充symfony2表单
这是我的表格:Php 使用createFormBuilder()预填充symfony2表单,php,symfony,Php,Symfony,这是我的表格: $studentObj = $this->getDoctrine()->getRepository('ProjectEntityBundle:Student') ->findBy(array('user' => $userId)); $form = $this->createFormBuilder($studentObj) ->add('fname', 'text', ar
$studentObj = $this->getDoctrine()->getRepository('ProjectEntityBundle:Student')
->findBy(array('user' => $userId));
$form = $this->createFormBuilder($studentObj)
->add('fname', 'text', array('label' => 'First Name'))
->add('lname', 'text', array('label' => 'Last Name'))
->add('save', 'submit', array('label' => 'Save My Profile'))
->getForm();
我从路由变量传递$userId。但它不会预先填充数据。如何解决此问题?您必须在控制器“级别”执行“预填充”
假设您有一个editStudentController
,并且您的表单名为studentFormType
,您可以这样做
public function editStudentController() {
//retrieve here $userId;
$student = $this->getDoctrine()->getRepository('ProjectEntityBundle:Student')
->findOneBy(array('user'=>$userId));
$form = $this->createForm(new studentFormType(), $student);
[...]
$view = $form->createView();
[...]
}
也许最好的方法是为实体创建一个FormType
ProjectEntityBundle:Student
,它可以帮助您使用命令
$ php app/console doctrine:create:form ProjectEntityBundle:Student
您可以在src/ProjectEntityBundle/Form/StudentType.php
上检查和自定义该类,稍后在您的操作中可以使用like
// here you can use [ParamConvert][1] to get the correct Entity without call your repository
public function editStudentAction(Student $student)
{
// don't forget the 'use' statement on top
$editForm = $this->createForm(new StudentType(), $student);
return array('edit_form' => $editForm->createView());
}
帮助链接