Symfony表单提交不起作用。

3
我一直在关注这个教程来创建一个Symfony 2.5的注册表格 (链接)。我唯一做出的改变是在我的类中增加了一个额外的用户名字段,并在表单中呈现它。
当向“account_create”路由提交表单(最终使用Account控制器中的create动作)时,它不能正确地处理表单。页面显示为空白,甚至分析器也不再显示。
此外,似乎脚本会破坏我的Apache(我在Windows本地通过XAMPP运行),因为无论我尝试做什么,在提交表单后都会导致无尽的加载。这意味着无论我尝试访问服务器上的哪个页面(即使只是分析器),我都不能进入。它只会永远地加载下去(我曾经等待过10分钟)。只有重新启动Apache才能解决这个问题。
这是我在Account控制器中的createAction。
// 'account_create' route
// TestBundle:Account:create
public function createAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();
    echo "Doctrine managed. ";

    $form = $this->createForm(new RegistrationType(), new Registration());
    echo "Form created. ";

    $form->handleRequest($request);
    echo "Request handled. ";

    if ($form->isValid()) {
        $registration = $form->getData();
        echo "Form data received. ";

        $em->persist($registration->getUser());
        echo "User persisted. ";
        $em->flush();
        echo "Toilet flushed. ";

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

    return $this->render(
        'TestBundle:Account:register.html.twig',
        array('form' => $form->createView())
    );
}

它只输出Doctrine managed. Form created.,因此显然在调用handleRequest($request)方法时崩溃。

到底是什么出了严重的问题?

如果需要其他脚本的代码,请告诉我!


你在实体类中添加了getUsername()和setUsername()吗? - timmz
@Timmz:我做了。User类为表单中涉及的每个值都有getter和setter方法。 - padarom
尝试使用以下代码:\Doctrine\Common\Util\Debug::dump($request); 来查看此对象中包含了什么。 - timmz
你最终找到解决方案了吗?我遇到了类似的问题:脚本停在handleRequest($request)处,没有任何错误或异常。应用程序日志为空,php日志为空,nginx日志为空。 在本地(Windows上的xampp,php 5.5.10)运行得很好。但在服务器上崩溃(ubuntu,nginx,php-fpm 5.5.13)。 - Marek
1个回答

2

我知道这不是答案,但无论如何它不适合作为评论,并且是调试的重要步骤。

将处理请求放入try块中,并输出异常信息。

    try {
        $form->handleRequest($request);
    } catch (\Exception $e) {
        echo "failed : ".$e->getMessage();
    }

什么异常被抛出了?

因为某种原因,如果我使用try-catch块,它不会抛出异常。但是Symfony不应该自己捕获异常并在dev环境中跟踪它们吗? - padarom
我还尝试通过set_error_handler()绑定自定义错误处理程序,以防止出现错误而不是异常。但脚本仍然只是停止执行,而没有捕获任何内容。 - padarom
是的,这很奇怪,你在文档中是否“使用”RegistrationType和Registration类?尝试先将它们设置为变量,例如 $type = new RegistrationType(),也许这就是失败的关键点。 - john Smith
我做了。Test\TestBundle\Form\Type\RegistrationTypeTest\TestBundle\Form\Model\Registration都被使用了。 - padarom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接