Services.YML:
Código YML:
Ver originalmy_form:
class: AppBundle\Utils\Formularios
arguments: ["@form.factory","@doctrine.orm.entity_manager"]
Custom Class:
use Doctrine\ORM\EntityManager;
Código PHP:
<?php
namespace TMKSeriesBundleUtils;
//Agregamos el entity Manager de doctrine
use DoctrineORMEntityManager;
use SymfonyBundleFrameworkBundleControllerController;
use SymfonyComponentFormFormFactoryInterface;
use TMKSeriesBundleEntitySeries;
use TMKSeriesBundleFormRegisterSerieType;
class FormCreator
{
public $formFactoryInterface;
public $entityManager;
public function __construct(FormFactoryInterface $formFactoryInterface, EntityManager $entityManager){
$this->formFactoryInterface = $formFactoryInterface;
$this->entityManager = $entityManager;
}
public function getFormAddSerie($request){
//$controller = new Controller(); << no hace falta crear un controller
$serie = new Series();
$form = $this->formFactoryInterface->create(new RegisterSerieType(), $serie);
if($request->getMethod() == 'POST'){
$form->bind($request);
if($form->isValid()){
$this->entityManager->persist($serie);
$this->entityManager->flush();
/* esto esta mal a menos que en el controller lo uses como te indique anteriormente
*if(get_class($form) == 'Symfony\Component\HttpFoundation\RedirectResponse')
*{
*return $form;
*}
*/
return $this->redirect($this->generateURL('loadSeries', array('state' => $serie->getState())));
//return true;
//return $form;
}
}
return $form;
}
}
?>
Como ves, le agregas al constructor el EntityManager para usarlo desde la clase. Seguis haciendo lo de devolver un Response, si devolves un Response tenes que decirle al metodo del controller que es un response, sino cuando hagas el form->createView() te va a saltar el error de que ese metodo no existe ya que es un Response.
Sigo insistiendo que es mejor para mi hacer todo en el metodo del controller pero si te sirve para hacer lo que queres tambien es valido(creo).
El codigo no lo probe, si tiene un error trata de arreglarlo y adaptarlo a tu necesidad. Suerte