Bueno , después de darle unas vueltas, y también viendo parte de tu código , he podido hacerlo con un solo método así:
NOTA: He cambiado el nombre de la clase y de la ENTIDAD de Book a Branch.
DefaultController.php
Código:
public function createBranchAction(Request $request){
$em = $this->getDoctrine()->getManager();
$parent_branch = new Branch();
// Esto es solo un ejemplo, lógicamente el (2) debe existir en la BD previamente, por lo que se pasaría al método createBranchAction como argumento.
$parent_branch = $em->getRepository('BranchMainBundle:Branch')->find(2);
//guardas parent
$em->persist($parent_branch);
$branch = new Branch();
$branch->setPhrase('Write a blog post');
$branch->setParentBranch($parent_branch);
// $book->setDueDate(new \DateTime('tomorrow'));
$branch->setCreatorUid(1);
$form = $this->createForm(new NewPhrase(), $branch);
$form->handleRequest($request);
if ($form->isValid()) {
// guardar la tarea en la base de datos
var_dump($branch);
$em = $this->getDoctrine()->getManager();
$em->persist($branch);
$em->flush();
return $this->redirect($this->generateUrl('task_success'));
}
// Default view.
return $this->render('BranchMainBundle:Default:new.html.twig', array(
'form' => $form->createView(),
));
}
La clase externa que genera el form.
NewPhrase.php
Código:
<?php
// src/Acme/TaskBundle/Form/Type/TaskType.php
namespace Branch\MainBundle\Form\Phrase;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class NewPhrase extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('phrase', 'text', array('label' => 'My phrase', 'max_length' => 500))
->add('parentBranch', 'entity', array(
'class' => 'BranchMainBundle:Branch',
))
->add('creatorUid', 'integer')
->add('save', 'submit');
}
// unique identifier for this form.
public function getName()
{
return 'phrase';
}
}
Mil gracias por tu ayuda, me ha aclarado cosas que no entendía del todo bien.