Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用createFormBuilder()预填充symfony2表单_Php_Symfony - Fatal编程技术网

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());
}
帮助链接

问题是“findBy”。不得不用芬登比。