38

私には、ManyToMany私が侵入OneToManyしたManyToOne関係があります。コレクションの代わりにチェックボックスを持つフォームを作成したいのですが、「DoctrineObject」ハイドレーターを使用していますが、機能せず、何が問題なのかわかりません。

関連しない他のすべてのフィールドの下のコードから削除しました。

役割エンティティ:

/**
 * @orm\Entity
 * @orm\Table(name="roles")
 */
class RolesEntity extends HemisEntity {
    /**
     * @orm\Id
     * @orm\Column(type="integer");
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * @orm\Column(name="role_code",type="string")
     */
    protected $roleCode;

    /**
     * @orm\OneToMany(targetEntity="RolesPermissionsEntity", mappedBy="role", cascade={"persist"})
     */
    protected $rolePermissions;

    public function __construct()
    {
        $this->rolePermissions = new ArrayCollection();
    }

    public function setRolePermissions($rolePermissions)
    {
        $this->rolePermissions = $rolePermissions;
        return $this;
    }

    public function addRolePermissions(Collection $rolePermissions)
    {
        foreach ($rolePermissions as $rolePermission) {
            $rolePermission->setRole($this);
            $this->rolePermissions->add($rolePermission);
        }
    }

    public function removeRolePermissions(Collection $rolePermissions)
    {
        foreach ($rolePermissions as $rolePermission) {
            $rolePermission->setRole(null);
            $this->rolePermissions->removeElement($rolePermission);
        }
    }

    public function getRolePermissions()
    {
        return $this->rolePermissions;
    }
}

ManyToMany テーブル エンティティ(より多くのフィールドがあるため、分割しました):

    /**
 * @orm\Entity
 * @orm\Table(name="roles_permissions")
 */
class RolesPermissionsEntity extends HemisEntity {
    /**
     * @orm\Id
     * @orm\Column(type="integer");
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * @orm\ManyToOne(targetEntity="RolesEntity", inversedBy="rolePermissions")
     * @orm\JoinColumn(name="role_id", referencedColumnName="id")
     **/
    protected $role;

    /**
     * @orm\ManyToOne(targetEntity="PermissionsEntity", inversedBy="permissionRoles")
     * @orm\JoinColumn(name="permission_id", referencedColumnName="id")
     **/
    protected $permission;

    public function setRole($role)
    {
        $this->role = $role;
        return $this;
    }

    public function getRole()
    {
        return $this->role;
    }

    public function setPermission($permission)
    {
        $this->permission = $permission;
        return $this;
    }

    public function getPermission()
    {
        return $this->permission;
    }
}

私のフォームは次のようになります:

class RoleForm extends Form implements InputFilterProviderInterface
{
    public function __construct(ObjectManager $objectManager)
    {
        parent::__construct('role');

        $this->setHydrator(new DoctrineHydrator($objectManager))
             ->setObject(new RolesEntity());

        $this->add(array(
            'type' => 'Zend\Form\Element\Hidden',
            'name' => 'id'
        ));

        $this->add(array(
            'type'    => 'Zend\Form\Element\Text',
            'name'    => 'roleCode',
            'options' => array(
                'label' => 'Role Code'
            ),
        ));

        $this->add(array(
            'name' => 'rolePermissions',
            'type' => 'DoctrineModule\Form\Element\ObjectMultiCheckbox',
            'options' => array(
                'label' => 'Permissions',
                'object_manager' => $objectManager,
                'target_class'   => 'Hemis\Fnd\PermissionsEntity',
                'property'       => 'permissionDesc'
            ),
        ));

        $this->add(array(
            'name' => 'submit',
            'type'  => 'Submit',
            'attributes' => array(
                'value' => 'Submit',
            ),
        ));
    }

    public function getInputFilterSpecification()
    {
        return array(
            'roleCode' => array(
                'required' => false
            ),
            'rolePermissions' => array(
                'required' => true
            )
        );
    }
}

問題は、ダンプする$roleと何も含まれずrolePermissions、フォームから渡されてもオブジェクトに水和されないことです。私の質問が明確であることを願っています。

私のコードの何が問題なのか、またはチェックボックスを使用してそれを行うより良い方法がありますか?

4

0 に答える 0