如何在 Symfony2控制器中获取表单值

我使用 Symfony2上的登录表单和以下控制器代码

public function loginAction(Request $request)
{
$user = new SiteUser();
$form = $this->createForm(new LoginType(), $user);




if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
$data = $form->getValues();
// Need to do something with the data here
}


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

但我得到了以下警告:

警告: array _ place _ recsive ()[ function tion.array-place-return ] : 在 Symfony src Symfony Component Form Form.php 第593行中,参数 # 1不是一个数组 500内部服务器错误-错误异常

谁能告诉我哪里出了问题,我该怎么解决? 谢谢。

更新: 树枝文件是这样的:

<div class="form">
{{ form_errors(form) }}
<form action="{{ path('site_user_login') }}" method="POST" {{ form_enctype(form) }}>
<div class="level1">
{{ form_row(form.username) }}
<a href="javascript:void(0)" id="inscription">{% trans %}Registration{% endtrans %}</a>
</div>
<div class="level2">
{{ form_row(form.pwd_hash) }}
<div class="forget_pass"><a href="#" id="frgt">{% trans %}Forgot Password ?{% endtrans %}</a></div>
</div>
<input type="submit" class="submit" name="login" value/>
<div class="clr"></div>
</form>
</div>

下面是表单类型中的函数

public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('username', 'text', array('label' => 'Username : '));
$builder->add('pwd_hash','password', array('label' => 'Password : '));
}

路线如下:

site_user_login:
pattern: /{_locale}/login
defaults: {_controller: GDSiteBundle:SiteUser:login}
223325 次浏览

如果使用 Symfony 2安全管理,则不需要获取发布的值,只需要管理表单模板(参见 文件)。

如果您不使用 Symfony 2安全管理,我强烈建议您使用它。如果你不想或者不能,你能告诉我们 LoginType的消息来源吗?

我用这个把它修好了:

if ($request->getMethod() == 'POST') {
$username = $request->request->get('username');
$password = $request->request->get('password');


// Do something with the post data
}

您还需要在函数中将 Request $Request 作为一个参数! 希望这个能帮上忙。

以上这些对我都不管用,这个对我管用:

$username = $form["username"]->getData();
$password = $form["password"]->getData();

希望能有所帮助。

我认为,为了获得由 form 对象绑定和验证的请求数据,您必须使用以下命令:

$form->getViewData();
$form->getClientData(); // Deprecated since version 2.1, to be removed in 2.3.

简单来说:

$data = $form->getData();

在 Symfony 2(更具体地说,是2.3版本)中,您可以通过以下方法获得字段的数据

$var = $form->get('yourformfieldname')->getData();

或者你可以把所有数据发送出去

$data = $form->getData();

其中“ $data”是一个包含表单字段值的数组。

private function getFormDataArray($form)
{
$data = [];
foreach ( $form as $key => $value) {
$data[$key] = $value->getData();
}
return $data;
}

在 Symfony > = 2.3中,可以使用以下命令获得单个字段的值:

$var = $form->get('yourformfieldname')->getData();

另一方面,你可以使用:

$data = $form->getData();

但是这会让你得到两种不同的东西:

  • 如果表单启用了 data-class选项(因此它绑定到一个实体) ,那么表单填充值的实体; 这将使用 'mapping' => false选项对任何字段进行 排除

  • 否则,为包含表单所有字段的数组

如果表单中有未在 Entity 中定义的额外字段,则 $form->getData()不起作用,一种方法可能是:

$request->get("form")["foo"]

或者:

$form->get('foo')->getData();

在 Symfony 表格中,有两种不同类型的 变压器和三种不同类型的基础数据: enter image description here

无论以何种形式,这三种不同类型的数据是:

  • 模型数据

    这是应用程序中使用的格式的数据(例如,问题对象)。如果您调用 Form::getData()Form::setData(),那么您正在处理“模型”数据。

  • 规范数据

    这是数据的规范化版本,通常与“模型”数据相同(尽管在我们的示例中不同)。通常不直接使用。

  • 查看数据

    这是用于填充表单字段本身的格式。它也是用户提交数据的格式。当您调用 Form::submit($data)时,$data 是“ view”数据格式。

这两种不同类型的变压器有助于转换每种类型的数据:

  • 型号变压器 :

    transform(): “模型数据”= > “规范数据”
    reverseTransform(): “标准数据”= > “模型数据”

  • 查看变压器 :

    transform(): “标准数据”= > “视图数据”
    “视图数据”= > “规范数据”

你需要哪个变压器取决于你的情况。

要使用视图转换器,请调用 addViewTransformer()


如果要获取所有表单数据:

$form->getData();

如果在特定的表单字段之后(例如 first_name) :

$form->get('first_name')->getData();

对于未映射的表单字段,我使用 $form-> get (‘ inputName’)-> getViewData () ;

要获取特定字段的数据,

$form->get('fieldName')->getData();

或所有表单数据

$form->getData();

链接到文档: https://symfony.com/doc/2.7/forms.html

如果是 Symfony 4或5,只需使用以下代码(其中 name 是字段的名称) :

$request->request->get('name');