我在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()));
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下警告:
警告: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>
Run Code Online (Sandbox Code Playgroud)
这是Form's Type中的函数
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('username', 'text', array('label' => 'Username : '));
$builder->add('pwd_hash','password', array('label' => 'Password : '));
}
Run Code Online (Sandbox Code Playgroud)
这是路线:
site_user_login:
pattern: /{_locale}/login
defaults: {_controller: GDSiteBundle:SiteUser:login}
Run Code Online (Sandbox Code Playgroud)
Hub*_*ron 92
简单地说
$data = $form->getData();
Run Code Online (Sandbox Code Playgroud)
pko*_*out 90
以上都不适合我.这对我有用:
$username = $form["username"]->getData();
$password = $form["password"]->getData();
Run Code Online (Sandbox Code Playgroud)
我希望它有所帮助.
alb*_*ert 57
在Symfony 2(更具体地说,2.3版本)中,您可以获取字段的数据
$var = $form->get('yourformfieldname')->getData();
Run Code Online (Sandbox Code Playgroud)
或者你可以发送所有数据
$data = $form->getData();
Run Code Online (Sandbox Code Playgroud)
其中'$ data'是一个包含表单字段值的数组.
Jea*_*ean 20
在Symfony> = 2.3中,您可以获得单个字段的值:
$var = $form->get('yourformfieldname')->getData();
Run Code Online (Sandbox Code Playgroud)
另一方面,您可以使用:
$data = $form->getData();
Run Code Online (Sandbox Code Playgroud)
但,这将让你两种不同的东西:
如果您的表单data-class启用了选项(因此它绑定到实体),则表单填充值的实体; 这将使用该选项排除任何字段'mapping' => false
否则,一个包含所有表单字段的数组
Sam*_*adi 15
如果您在实体中未定义的表单中有额外的字段,$form->getData()则不起作用,一种方法可能是:
$request->get("form")["foo"]
Run Code Online (Sandbox Code Playgroud)
要么 :
$form->get('foo')->getData();
Run Code Online (Sandbox Code Playgroud)
要获取特定字段的数据,
$form->get('fieldName')->getData();
Run Code Online (Sandbox Code Playgroud)
或者对于所有表单数据
$form->getData();
Run Code Online (Sandbox Code Playgroud)
链接到文档:https : //symfony.com/doc/2.7/forms.html
在Symfony 表单中,有两种不同类型的转换器和三种不同类型的底层数据:
在任何形式中,三种不同类型的数据是:
模型数据
这是应用程序中使用的格式的数据(例如,Issue对象).如果你打电话Form::getData()或Form::setData(),你正在处理"模型"数据.
规范数据
这是数据的标准化版本,通常与"模型"数据相同(尽管不在我们的示例中).它并不常用.
查看数据
这是用于填写表单字段本身的格式.它也是用户提交数据的格式.当您致电时Form::submit($data),$ data采用"查看"数据格式.
两种不同类型的变换器有助于转换为以下每种类型的数据:
模型变压器:
transform():"模型数据"=>"规范数据"
reverseTransform():"规范数据"=>"模型数据"
查看变形金刚:
transform():"norm data"=>"查看数据"
reverseTransform():"查看数据"=>"标准数据"
您需要哪种变压器取决于您的情况.
要使用视图转换器,请调用addViewTransformer().
如果您想获取所有表单数据:
$form->getData();
Run Code Online (Sandbox Code Playgroud)
如果您在特定表单字段之后(例如first_name):
$form->get('first_name')->getData();
Run Code Online (Sandbox Code Playgroud)