【问题标题】:Symfony3 - My handwritten post form don't workSymfony3 - 我的手写帖子表单不起作用
【发布时间】:2016-02-26 10:06:47
【问题描述】:

我正在尝试学习如何使用 Symfony3。
我正在尝试制作一个简单的表格来连接。该表单成功地将我重定向到我的页面 /login ,这非常棒。但是它不会将帖子信息发送到页面:/你知道怎么做吗?
这是我的控制器的代码:

    public function showAction(Request $request){
        $motDePasse = $request->request->get("motDePasse", "");
        $identifiant = $request->request->get("identifiant", "");

        if($motDePasse  != "" && $identifiant != ""){
            // I make my user object and put it in $_SESSION
        }

        return $this->render("login/show.html.twig", [
            "identifiant" => $identifiant
        ]);
    }

还有我的树枝代码:

{% extends "::base.html.twig" %}

{% block body %}
    <div id='loginBox'>
        <div class='center'>
            <div class='logo'></div>
            <h1>HyperPlanning</h1>
            <form action="{{ path('login') }}" method='post'>
                <input name='identifiant' type='text'     placeholder='Identifiant' value="{{ identifiant }}"><br/>
                <input name='motDePasse'  type='password' placeholder='Mot de passe'><br/>
                <input name='remember'    type='hidden' value='0'><br>
                <input name='remember'    type='checkbox' value='1' checked>    <span>Rester connecter</span><br>
                <input type='submit' value='Se connecter'>
            </form>
        </div>
    </div>
{% endblock %}

【问题讨论】:

  • 有理由不使用表单生成器吗?
  • 是的,因为我很难使用它。我尝试使用表单构建器,但它需要在表单提交时创建一个对象(我不想要)。所以我尝试了一个没有对象的表单构建器,我得到了错误:无法加载类型“表单”。而且我在谷歌上也没有找到任何帮助……(这句话不能存在^^)
  • 您可以使用dump($request) 查看实际提交给控制器的信息,也许这会有所帮助。
  • Thx @Karolis,我正在使用 app_dev.php 页面,当我在开发底部栏上查看时,它说我不存在发布数据:/
  • 我明白了。在您的 html 表单中,您使用的是“登录”路径,但该操作称为“显示”。可能问题就在这里。

标签: forms post symfony


【解决方案1】:

我的笔记本电脑上没有配置 Symfony3 项目,但 Symfony v2.7。不过,我假设该脚本也可以在 Symfony3 中运行。

我有一个DefaultController,其中包含loginmanageLogin 的操作。第一个动作包含上述 html 表单,第二个动作转储 $request。这两个动作都有各自的动作名称作为路由名称。在我使用的 html 表单中,manageLoginAction 的路由名称为 action="..."。

提交表单时会呈现manageLoginAction

默认控制器:

<?php
// [...]
class DefaultController extends Controller
{
// [...]

/**
 * @Route("/konto/login", name="login")
 * @Template()
 */
public function loginAction(Request $request)
{
    return array(
        'base_dir' => realpath($this->container->getParameter('kernel.root_dir').'/..'),
    );
}
/**
 * @Route("/konto/manageLogin", name="manageLogin")
 * @Template()
 */
public function manageLoginAction(Request $request)
{
    dump($request);
    die;
}

// [...]
}

login.twig.html:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>{% block title %}Welcome!{% endblock %}</title>
        {% block stylesheets %}{% endblock %}
        <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
    </head>
    <body>
        {% block body %}
            <div id='loginBox'>
                <div class='center'>
                    <div class='logo'></div>
                    <h1>HyperPlanning</h1>
                    <form action="{{ path('manageLogin') }}" method='post'>
                    <input name='identifiant' type='text'     placeholder='Identifiant' value="Identifier"><br/>
                    <input name='motDePasse'  type='password' placeholder='Mot de passe'><br/>
                    <input name='remember'    type='hidden' value='0'><br>
                    <input name='remember'    type='checkbox' value='1' checked>                <span>Rester connecter</span><br>
                    <input type='submit' value='Se connecter'>
                </form>
            </div>
       </div>
   {% endblock %}
   {% block javascripts %}{% endblock %}
   </body>

转储($request):

【讨论】:

  • 非常感谢@AMartinNo1,您的代码有效,我发现了问题,生成表单的控制器为自己创建了一个动作,我可以这样做吗?
  • @J.Doe 是的,您可以使用相同的操作来显示表单和处理提交的内容。由于我的回答已经解决了您的问题,您可以投票/将其标记为正确答案吗?泰。
  • 我哭了,我不能重定向到同一个控制器(不知道为什么),但我可以用另一个 :D thx
  • @J.Doe 控制器中的重定向,如原生 php header('Location: index.php')?
猜你喜欢
  • 1970-01-01
  • 2011-12-30
  • 2018-09-17
  • 2018-10-16
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
相关资源
最近更新 更多