控制器必须返回响应,动作永远不会执行

时间:2013-08-05 18:37:52

标签: symfony symfony-forms symfony-2.3

我的控制器中有这个代码:

/**
 * 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时,表单显示没有任何问题,操作转到/但是当我发送表单时出现此错误:

  

控制器必须返回响应(Array(entity =>   对象(BankBundle \ Entity \ AccountType),form =>   对象(Symfony \ Component \ Form \ FormView))给出)。

为什么呢?我的代码出了什么问题?

更新

我发现问题所在,我在两个不同的控制器中有两条具有相同定义的路径:

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

修复后问题解决了吗

2 个答案:

答案 0 :(得分:0)

在再次阅读完代码并尝试找到我的错误之后,我终于找到了。我有两个控制器:AccountController.phpTestController.php,我已经定义了(我的错误,因为我只是将AccountController.php复制到TestController.php)与此函数中相同的路径: / p>

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

出于这个原因,我很难,这就是Symfony试图调用路由wba_create时数据丢失的原因。我没有添加注释@Template("")。这是解决方案,希望适用于任何运行相同问题的

答案 1 :(得分: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(),
    ));
}