我正在关注使用具有FOSUserBundle的群组 Doc Symfony https://symfony.com/doc/current/bundles/FOSUserBundle/groups.html。
在我基于教条实体生成 CRUD组控制器之后
=> $ php app/console generate:doctrine:crud
所以,我有:
GroupRole.php
<?php
// src/BISSAP/UserBundle/Entity/GroupRole.php
namespace BISSAP\UserBundle\Entity;
use FOS\UserBundle\Model\Group as BaseGroup;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="fos_group")
*/
class GroupRole extends BaseGroup
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
}
部分供应商/ friendsofsymfony / user-bunde / ModelGroup.php
abstract class Group implements GroupInterface
{
protected $id;
protected $name;
protected $roles;
public function __construct($name, $roles = array())
{
$this->name = $name;
$this->roles = $roles;
}
[...]
}
GroupController.php的一部分 (CRUD Symfony生成)
public function newAction()
{
$entity = new GroupRole();
$form = $this->createCreateForm($entity);
return $this->render('BISSAPUserBundle:GroupRole:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
grouprole.yml的一部分
grouprole_new:
path: /new
defaults: { _controller: "BISSAPUserBundle:GroupRole:new" }
当我访问 ../ web / app_dev.php / grouprole / new ,以便通过 GroupRoleController.php ,我收到错误:
Warning: Missing argument 1 for FOS\UserBundle\Model\Group::__construct(), called in /var/www/bodykoncept/src/BISSAP/UserBundle/Controller/GroupRoleController.php on line 81 and defined
通常,当我通过CRUD Controller创建一个新实体时,我不需要将任何参数传递给__construct()!?
也许是否有另一种方法将CRUD用于FOS组?
答案 0 :(得分:0)
您的构造函数中存在错误,这些错误会导致您的问题。
电流的
$entity = new GroupRole();
$form = $this->createCreateForm($entity);
这不是您在Symfony中创建表单的方式。您必须create a formType上课,然后将其传递给$this->createForm(xx)
(请注意您已经将方法调用错误)。
创建表单类型后,可能看起来像这样:
<强>的appbundle /形式/ GroupRoleType.php 强>
class GroupRoleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', TextType::class);
// ... plus whatever other fields you want
}
}
然后在你的控制器中:
<强>的appbundle /控制器/ GroupController 强>
$groupRole = new GroupRole('something');
$form = $this->createForm(GroupRoleType::class, $groupRole);
$form->handleRequest($request);
createForm
采用第二个参数来定义表格中的初始数据。如果您传入新的groupRole对象,则会使用名称字段预填充表单,然后您的用户可以更改该字段。如果您不想这样做,请不要传递任何内容,并在提交后创建新的groupRole对象,并从表单手动绑定数据。
Symfony会知道原始类有一个构造,并使用该窗体填充它。