2015-09-09 30 views
0

所以我一直在嘗試一段時間來修改symfonys基礎crud系統以滿足我的需求。但是我不明白爲什麼在獲取表單中他們定義了實體,然後在他們的帖子中他們再次寫入實體?如何修改symfony crud

我有一個關係,將1個工作與多個工作項目聯繫起來,我想要修改的是創建'工作',以便從工作項目創建工作,並通過dash_work_new路徑傳遞jobId。

選項1

我設法是什麼,從通過可變負載我的工作實體,並把我的工作項目,像這樣實體 - $> setWorkJob()。大?否,因爲提交dash_work_create路由被調用,爲什麼?工作實體又被定義了嗎?因此擦拭任何我在newAction()方法

選項2

所以我想我會通過變量作爲隱藏字段然後加載上提交的所有數據,但掛在createCreateForm是設置在createAction中重新定義,所以如果我試圖通過createCreateForm($ entity,$ jobId)在新操作中傳遞一個變量。我也需要在createAction中定義它,但是我沒有.... AH%#@@ EXPLETIVE EXPLETIVE EXPLETIVE

AH沮喪和缺乏理解。參考由console crud生成的symfony workController。我留在,從@route新去@route新/ {}的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 \Symfony\Component\Form\Form 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(), 
    ); 
} 
+0

- 你將形式動作設置爲該路線,這就是爲什麼。 – malcolm

+0

我意識到malcolm,這是控制器在使用php app/console doctrine創建時的默認行爲:generate:crud – hounded

回答

1

在您的文章操作形式骨架創建改變的新路線:

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

因爲它需要處理的請求,再後來形式充滿了請求數據:

$form->handleRequest($request); 

現在,你有你newAction()提供的數據表單,以後你驗證它:

$form->isValid() 

現在,理論已經足夠。我看到你只是想通過jobId到你的POST動作。最簡單的方法是通過網址,所有你需要做的就是改變形式的路線和行動。 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('MyBundle\Entity\Job')->findOneById($jobId); 
    $entity->setWorkJob($job); 

    $em->persist($entity); 
    $em->flush(); 

    return $this->redirect($this->generateUrl('dash_job')); 

} 

return array(
    'entity' => $entity, 
    'form' => $form->createView(), 
); 

和新的行動: 「dash_work_create路由被稱爲爲什麼」

/** 
* 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(), 
    ); 
}