我正在建立一个新的Web应用程序项目,并运行命令来生成用户类和CRUD模板(https://symfony.com/blog/new-and-improved-generators-for-makerbundle)。
当我进入用户索引页面时,它会相应加载,但是当我尝试进入用户/新页面时,我会得到一个数组到字符串的转换异常。
如果我在new.html.twig中注释掉生成的{{include('user / _form.html.twig')}},则页面加载。因此,我一直专注于传递给_form.html.twig的表单。
我怀疑问题出在数组的用户属性“角色”上,但是我不确定。
这是所有Symfony生成的代码-我在这里没有修改或编写任何内容。
这是引发错误的地方:
UserController.php
return $this->render('user/new.html.twig', [
'user' => $user,
'form' => $form->createView(),]);
_form.html.twig
{{ form_start(form) }}
{{ form_widget(form) }}
<button class="btn">{{ button_label|default('Save') }}</button>
{{ form_end(form) }}
用户类别属性
class User implements UserInterface
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=180, unique=true)
*/
private $username;
/**
* @ORM\Column(type="json")
*/
private $roles = [];
/**
* @var string The hashed password
* @ORM\Column(type="string")
*/
private $password;
据我了解,Symfony将尝试猜测字段类型并相应地构造表格。因此,我不确定是导致此问题的原因是数组字段类型,还是实际上来自createView调用。
添加了UserType.php
<?php
namespace App\Form;
use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username')
->add('roles')
->add('password')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}