我在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_replace_recursive()[function.array-replace-recursive]:参数#1不是\ vendor \ symfony \ src \ Symfony \ Component \ Form \ Form.php第593行中的数组 500内部服务器错误 - ErrorException
有人可以帮我理解什么是不正确的,以及我如何解决它?感谢。
更新: twig文件是这样的:
<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}
答案 0 :(得分:92)
简单地说:
$data = $form->getData();
答案 1 :(得分:90)
以上都不适合我。这对我有用:
$username = $form["username"]->getData();
$password = $form["password"]->getData();
我希望它有所帮助。
答案 2 :(得分:57)
在Symfony 2(更具体地说,2.3版本)中,您可以通过
获取字段数据$var = $form->get('yourformfieldname')->getData();
或者您可以发送所有数据
$data = $form->getData();
其中'$ data'是一个包含表单字段值的数组。
答案 3 :(得分:20)
在Symfony&gt; = 2.3中,您可以使用以下内容获取单个字段的值:
$var = $form->get('yourformfieldname')->getData();
另一方面,您可以使用:
$data = $form->getData();
但这会让你有两件事:
如果您的表单启用了data-class
选项,则表单填充了值的实体(因此它与实体绑定);这将使用'mapping' => false
选项
否则,包含所有表单字段的数组
答案 4 :(得分:15)
如果您在实体中未定义的表单中有额外字段,$form->getData()
不起作用,则可以采用以下方法:
$request->get("form")["foo"]
或者:
$form->get('foo')->getData();
答案 5 :(得分:5)
在Symfony forms中,有两种不同类型的transformers和三种不同类型的基础数据: 在任何形式中,三种不同类型的数据是:
模型数据
这是您的应用程序中使用的格式的数据(例如,Issue对象)。如果您致电Form::getData()
或Form::setData()
,则需要处理&#34;型号&#34;数据
规范数据
这是您的数据的标准化版本,通常与您的&#34;型号&#34;相同。数据(虽然不在我们的例子中)。它并不常用。
查看数据
这是用于填写表单字段本身的格式。它也是用户提交数据的格式。当您拨打Form::submit($data)
时,$ data位于&#34;视图&#34;数据格式。
两种不同类型的变换器有助于转换为每种类型的数据:
模型变换器:
transform()
:&#34;模型数据&#34; =&GT; &#34;规范数据&#34;
reverseTransform()
:&#34;规范数据&#34; =&GT; &#34;模型数据&#34;
查看变换器:
transform()
:&#34;规范数据&#34; =&GT; &#34;查看数据&#34;
reverseTransform()
:&#34;查看数据&#34; =&GT; &#34;规范数据&#34;
您需要哪种变压器取决于您的情况。
要使用视图转换器,请调用addViewTransformer()
。
如果您想获取所有表单数据:
$form->getData();
如果您在特定表单字段之后(例如first_name
):
$form->get('first_name')->getData();
答案 6 :(得分:4)
我得到了它的工作:
if ($request->getMethod() == 'POST') {
$username = $request->request->get('username');
$password = $request->request->get('password');
// Do something with the post data
}
您还需要将Request $请求作为参数添加到函数中! 希望这会有所帮助。
答案 7 :(得分:4)
我认为为了获取由表单对象绑定和验证的请求数据,您必须使用以下命令:
$form->getViewData();
$form->getClientData(); // Deprecated since version 2.1, to be removed in 2.3.
答案 8 :(得分:3)
private function getFormDataArray($form)
{
$data = [];
foreach ( $form as $key => $value) {
$data[$key] = $value->getData();
}
return $data;
}
答案 9 :(得分:2)
如果您正在使用Symfony 2安全管理,则无需获取发布的值,您只需管理表单模板(请参阅documentation)。
如果您不使用Symfony 2安全管理,我建议您强烈使用它。如果你不想或不能,你可以给我们LoginType
的来源吗?
答案 10 :(得分:2)
要获取特定字段的数据,
$form->get('fieldName')->getData();
或者对于所有表单数据
$form->getData();
答案 11 :(得分:1)
如果使用Symfony 4或5,请使用以下代码(名称是您的字段名称):
$request->request->get('name');
答案 12 :(得分:0)
对于未映射的表单字段,我使用$ form-> get('inputName')-> getViewData();