如何修改symfony crud



所以我已经尝试了一段时间来修改symfonys的基本crud系统以满足我的需要。然而,我无法理解为什么在get形式中他们定义了实体,然后在帖子中他们又重写了实体?

我有一个关系,它将1个作业与许多工作项联系起来,我想修改的是创建'Work',以便它是从一个作业项创建的,并且通过dash_work_new路由传递jobId。

选项1

我管理的是从传递的变量中加载我的工作实体并设置我的工作项,就像这样$entity->setWorkJob()。伟大的?不,因为在提交时调用了dash_work_create路由,为什么?工作实体是否再次定义?因此清除我在newAction()方法

中设置的任何内容

选项2

所以我想我会传递变量作为一个隐藏的字段,然后加载提交的所有数据,但挂在createCreateForm是在createAction中重新定义的,所以如果我试图通过createCreateForm($entity,$jobId)在新动作中传递一个变量。我还需要在createAction中定义它,但我没有....啊%#@@ expleve expleve expleve

AH的挫折和缺乏理解。参考console crud生成的symfony workController。我留下了改变后的新路由,从@route new变成@route new/{jobId}

非常感谢您的帮助

/**
 * Creates a new Work entity.
 *
 * @Route("/", name="dash_work_create")
 * @Method("POST")
 * @Template("LaelapsInvoiceBundle:Work:new.html.twig")
 */
public function createAction(Request $request)
{
    $entity = new Work();
    $form = $this->createCreateForm($entity);
    $form->handleRequest($request);
    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();
        return $this->redirect($this->generateUrl('dash_job'));
    }
    return array(
        'entity' => $entity,
        'form'   => $form->createView(),
    );
}
/**
 * Creates a form to create a Work entity.
 *
 * @param Work $entity The entity
 *
 * @return SymfonyComponentFormForm The form
 */
private function createCreateForm(Work $entity)
{
    $form = $this->createForm(new WorkType(), $entity, array(
        'action' => $this->generateUrl('dash_work_create'),
        'method' => 'POST',
    ));
    $form->add('submit', 'submit', array('label' => 'Create'));
    return $form;
}
/**
 * Displays a form to create a new Work entity.
 *
 * @Route("/new/{jobId}", name="dash_work_new")
 * @Method("GET")
 * @Template()
 */
public function newAction($jobId)
{
    $entity = new Work();
    $form  = $this->createCreateForm($entity);
    return array(
        'entity' => $entity,
        'form'   => $form->createView(),
    );
}

在您的POST操作中创建表单框架:

$entity = new Work();
$form = $this->createCreateForm($entity);

因为需要处理请求,所以后面的表单中填充了请求数据:

$form->handleRequest($request);

现在您有了包含newAction()中提供的数据的表单,然后验证它:

$form->isValid()

现在,足够的理论。我看到您只是想将jobId传递给POST操作。最简单的方法是通过url,你所要做的就是改变表单的路由和动作。POST动作看起来像这样:

/**
 * Creates a new Work entity.
 *
 * @Route("/{jobId}", name="dash_work_create")
 * @Method("POST")
 * @Template("LaelapsInvoiceBundle:Work:new.html.twig")
 */
public function createAction(Request $request, $jobId)
{
    $entity = new Work();
    $form = $this->createForm(new WorkType(), $entity);
    $form->handleRequest($request);
    if ($form->isValid()) {
    $em = $this->getDoctrine()->getManager();
    //fetch you Job entity by $jobId and do what you need.
    $job = $em->getRepository('MyBundleEntityJob')->findOneById($jobId);
    $entity->setWorkJob($job);
    $em->persist($entity);
    $em->flush();
    return $this->redirect($this->generateUrl('dash_job'));
}
return array(
    'entity' => $entity,
    'form'   => $form->createView(),
);

和new action:

/**
 * Displays a form to create a new Work entity.
 *
 * @Route("/new/{jobId}", name="dash_work_new")
 * @Method("GET")
 * @Template()
 */
public function newAction($jobId)
{
    $entity = new Work();
    $form = $this->createForm(new WorkType(), $entity,
                array(
                    'action' => $this->generateUrl('dash_work_create', array('jobId' => $jobId ))
             ));
    return array(
        'entity' => $entity,
        'form'   => $form->createView(),
    );
}

最新更新