Ver Mensaje Individual
  #11 (permalink)  
Antiguo 03/11/2015, 16:59
molinasergio91
 
Fecha de Ingreso: enero-2013
Ubicación: Santa Fe, VT
Mensajes: 68
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: Formularios en distinto método

Services.YML:
Código YML:
Ver original
  1. my_form:
  2.             class: AppBundle\Utils\Formularios
  3.             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 $formFactoryInterfaceEntityManager $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