我正在尝试配置CRUD组(FOS用户软件包)

时间:2016-02-01 11:02:12

标签: php symfony doctrine-orm crud fosuserbundle

我正在关注使用具有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组?

1 个答案:

答案 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会知道原始类有一个构造,并使用该窗体填充它。