У меня есть два объекта Project и Task. Значение task_id задачи сопоставляется с идентификатором проекта. Каждый раз, создавая новую задачу для конкретного проекта, необходимо указать project_id в таблице Task. Есть ли другой способ сделать это, кроме использования скрытой формы поля ввода?
createAction of TaskController
public function createAction(Request $request)
{
$entity = new Tasks();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('tasks_show', array('id' => $entity->getId())));
}
return $this->render('TestBundle:Tasks:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
Сначала вам нужно получить проект, который вы хотите назначить для него. Например, вы можете отправить его через Request $request
затем использовать его для запроса Project Object
затем назначить задачу этому объекту.
public function createAction(Request $request)
{
$entity = new Tasks();
// doctrine entity manager
$em = this->getDoctrine()->getManager();
// get project_id from query string
$project_id = $request->get('project_id');
// query database for project object
$project = $em->getRepository("TestBundle:Project")->find($project_id);
// assign task to project object
$entity->setProject($project);
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('tasks_show', array('id' => $entity->getId())));
}
return $this->render('TestBundle:Tasks:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
Кроме того, newAction()
- лучшее место для этого.
Надеюсь, это поможет.
Да, вызовите setProject($project)
в действии контроллера, где вы обрабатываете форму