2013-08-05 3 views
0

У меня есть этот код в моем контроллере:Контроллер должен возвращать ответ, действие никогда не выполняется

/** 
* Displays a form to create a new Bank Account 
* 
* @Route("/account/new", name="wba_new") 
* @Method("GET") 
* @Template("BankBundle:BankAccount:new.html.twig") 
*/ 
public function newBankAccountAction() { 
    $entity = new Account(); 
    $form = $this->createForm(new AccountType(), $entity); 

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

/** 
* Handle bank account creation 
* 
* @Route("/", name="wba_create") 
* @Method("POST") 
*/ 
public function createAction(Request $request) { 
    $entity = new Account(); 
    $form = $this->createForm(new AccountType(), $entity); 
    $form->handleRequest($request); 

    print_r($request); 
    exit; 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($entity); 
     $em->flush(); 

     return $this->redirect($this->generateUrl('wba_list')); 
    } 

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

Когда я звоню /account/new форму показало без каких-либо проблем, и действие идет в /, но когда я отправить form Я получил эту ошибку:

The controller must return a response (Array(entity => Object(BankBundle\Entity\AccountType), form => Object(Symfony\Component\Form\FormView)) given).

Почему? Что не так в моем коде?

UPDATE

я нашел, где этот вопрос, у меня есть два маршрута с тем же определением в двух различных контроллеров:

/** 
* Handle bank account creation 
* 
* @Route("/", name="wba_create") 
* @Method("POST") 
*/ 

После исправить проблемные вещи работает

+1

Не является ли действие контроллера причиной возврата объекта 'Response'? –

+0

@JoachimIsaksson не всегда, см. Мое издание – Reynier

+1

@JoachimIsaksson прав. Вы забыли аннотацию '@ Template' поверх функции' createAction() '. – cheesemacfly

ответ

0

После чтения код снова завершается и пытается найти, где моя ошибка, наконец, я нашел. У меня было два контроллера: AccountController.php и TestController.php и в обоих я определил (моя ошибка, потому что я просто скопировал AccountController.php в TestController.php) одни и те же маршруты, что и в этой функции:

/** 
* Handle bank account creation 
* 
* @Route("/", name="wba_create") 
* @Method("POST") 
*/ 
public function createAction(Request $request) { 
    ... 
} 

По этой причине, я жесткий, был почему данные были потеряны, когда Symfony пытается позвонить по маршруту wba_create. Я не добавил аннотацию @Template(""). Это решение, надеюсь, работает для любой работы с той же проблемой.

0
/** 
* Displays a form to create a new Bank Account 
* 
* @Route("/account/new", name="wba_new") 
*/ 
public function newBankAccountAction() 
{ 
    $entity = new Account(); 
    $form = $this->createForm(new AccountType(), $entity); 

    return $this->render('BankBundle:BankAccount:new.html.twig',array(
      'entity' => $entity, 
      'form' => $form->createView(), 
    )); 
} 
Смежные вопросы