如何通过FOSUserBundle和Symfony3中的其他字段扩展注册表

苹果梨

我正在学习Symfony3框架。现在,我正在构建包含两个实体的项目:用户和目录。目录实体用于其他公司数据(公司名称,地址等)-就像名片。单用户(但不是全部)仅与一张名片(目录实体)相连,这就是为什么我决定使用两个单独的实体的原因。一些用户可以访问例如后端,而其他用户则可以添加和管理他们的一张名片。我想允许用户在注册时填写他的公司详细信息。我正在为用户实体使用FOSUserBundle。现在,我可以使用注册表格了,但是我遇到了麻烦,需要您的帮助来嵌入我的CatalogType表格。

CatalogType形式:

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class CatalogType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
        ->add('name')
        ->add('address')
        ->add('city')
        ->add('province')
        ->add('postcode')
        ->add('telephone')
        ->add('fax')
        ->add('mobile')
        ->add('email')
        ->add('webpage')
        ->add('misc')        
        ;
    }

    public function getParent()
    {
        return 'FOS\UserBundle\Form\Type\RegistrationFormType';
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'app_user_registration';
    }

}

用户实体:

use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
 */
class User extends BaseUser
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
    * @var
    * 
    * @ORM\OneToMany(targetEntity="Comment", mappedBy="user")
    */
    private $comments;

    /**
    * @var
    * 
    * @ORM\OneToOne(targetEntity="Catalog", mappedBy="user")
    */
    private $catalog;

    public function __construct()
    {
        parent::__construct();

        $this->comments = new \Doctrine\Common\Collections\ArrayCollection();
    }


    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Add comment
     *
     * @param \AppBundle\Entity\Comment $comment
     *
     * @return User
     */
    public function addComment(\AppBundle\Entity\Comment $comment)
    {
        $this->comments[] = $comment;

        return $this;
    }

    /**
     * Remove comment
     *
     * @param \AppBundle\Entity\Comment $comment
     */
    public function removeComment(\AppBundle\Entity\Comment $comment)
    {
        $this->comments->removeElement($comment);
    }

    /**
     * Get comments
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getComments()
    {
        return $this->comments;
    }

    /**
     * Set catalog
     *
     * @param \AppBundle\Entity\Catalog $catalog
     *
     * @return User
     */
    public function setCatalog(\AppBundle\Entity\Catalog $catalog = null)
    {
        $this->catalog = $catalog;

        return $this;
    }

    /**
     * Get catalog
     *
     * @return \AppBundle\Entity\Catalog
     */
    public function getCatalog()
    {
        return $this->catalog;
    }
}

目录实体

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Catalog
 *
 * @ORM\Table(name="catalog")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\CatalogRepository")
 */
class Catalog
{
// ... definition a lot of private variables ...
/**
* @var
* 
* @ORM\OneToOne(targetEntity="User", inversedBy="catalog")
* @ORM\JoinColumn(name="user_id", nullable=true)
*/
private $user;

// ...

/**
 * Set user
 *
 * @param \AppBundle\Entity\User $user
 *
 * @return Catalog
 */
public function setUser(\AppBundle\Entity\User $user = null)
{
    $this->user = $user;

    return $this;
}

/**
 * Get user
 *
 * @return \AppBundle\Entity\User
 */
public function getUser()
{
    return $this->user;
}

服务配置文件:

// app/config/services.yml
services:
    app.form.registration:
        class: AppBundle\Form\CatalogType
        tags:
            - { name: form.type, alias: app_user_registration }

当我尝试在http:// localhost:8000 / register /下显示注册表单时,出现错误:

属性“名称”或方法“ getName()”,“ name()”,“ isName()”,“ hasName()”,“ __ get()”都不存在,并且在类“ AppBundle \”中没有公共访问权限实体\用户”。

我知道问题出在哪里,但我不知道如何正确解决,因此,如果有人可以在需要寻找解决方案或解决方案的地方为我提供帮助,那就太好了。谢谢。

Đipalo母亲

CatalogType不应扩展RegistrationFormType。它应该是AppBundle \ Entity \ Catalog的表单类型。您应该创建基于用户类(FOS \ UserBundle \ Model \ User的子类)的表单类型,并嵌入CatalogType表单。

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('...', ...)
                ->add('tasks', CollectionType::class, array(
                    'entry_type' => CatalogType::class,
                    ...
                ));
                ...
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\User',
        ));
    }

    public function getBlockPrefix()
    {
        return 'app_user_registration';
    }
}


class CatalogType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
        ->add('name')
        ->add('address')
        ->add('city')
        ->add('province')
        ->add('postcode')
        ->add('telephone')
        ->add('fax')
        ->add('mobile')
        ->add('email')
        ->add('webpage')
        ->add('misc')        
        ;
    }
 ...
}

有关嵌入表单的更多信息:https ://symfony.com/doc/current/form/form_collections.html有关覆盖FosUserBundle表单的更多信息:http ://symfony.com/doc/current/bundles/FOSUserBundle/overriding_forms.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C#中通过用户交互运行注册表文件

来自分类Dev

FOSUserBundle,组和注册表

来自分类Dev

通过Windows注册表安装Chrome扩展程序

来自分类Dev

HP UFT注册表设置是否允许其他HP产品运行测试和组件?

来自分类Dev

在注册表中找不到Eclipse rcp扩展

来自分类Dev

通过Windows注册表从商店安装扩展

来自分类Dev

如何使用gcloud或其他CLI在Google容器注册表中列出已发布的容器映像

来自分类Dev

从其他项目更新dvc注册表中的数据

来自分类Dev

Docker本地注册表从其他端口运行

来自分类Dev

从其他项目更新dvc注册表中的数据

来自分类Dev

如何使用Windows注册表自动在Outlook 2007中设置Exchange的代理服务器以及其他设置?

来自分类Dev

如何在Windows 8.1中通过注册表设置该屏幕的颜色?

来自分类Dev

FOSUserBundle,组和注册表

来自分类Dev

允许其他HP产品运行测试和组件的HP UFT注册表设置吗?

来自分类Dev

FOSUserBundle-用户发送注册表后如何将其保留在首页上?

来自分类Dev

如何通过策略更新Windows(通过注册表)

来自分类Dev

如何在FOSUserBundle中的另一个字段Symfony 2.7中添加注册表单

来自分类Dev

如何还原和转储Windows注册表而不覆盖当前注册表

来自分类Dev

Symfony3 FOSUserBundle填充表

来自分类Dev

如何在Jetty用户表中添加和使用其他字段?

来自分类Dev

无法通过注册表安装Firefox扩展

来自分类Dev

如何通过阅读注册表在Inno Setup中验证用户名和密码

来自分类Dev

通过将程序添加到注册表中,如何使程序在启动时运行?

来自分类Dev

Docker:注册表:无法从其他人的私有注册表中提取

来自分类Dev

Symfony3 表单类型,通过 id 引用其他实体

来自分类Dev

如何使用触发器和其他表中的数据更新字段?

来自分类Dev

如何将图像数据和其他参数从注册表单发送到 php

来自分类Dev

如何向依赖于同一注册表的其他两个字段的字段添加新值?

来自分类Dev

如何通过登录注册表来限制WordPress网站中的特定页面?

Related 相关文章

  1. 1

    如何在C#中通过用户交互运行注册表文件

  2. 2

    FOSUserBundle,组和注册表

  3. 3

    通过Windows注册表安装Chrome扩展程序

  4. 4

    HP UFT注册表设置是否允许其他HP产品运行测试和组件?

  5. 5

    在注册表中找不到Eclipse rcp扩展

  6. 6

    通过Windows注册表从商店安装扩展

  7. 7

    如何使用gcloud或其他CLI在Google容器注册表中列出已发布的容器映像

  8. 8

    从其他项目更新dvc注册表中的数据

  9. 9

    Docker本地注册表从其他端口运行

  10. 10

    从其他项目更新dvc注册表中的数据

  11. 11

    如何使用Windows注册表自动在Outlook 2007中设置Exchange的代理服务器以及其他设置?

  12. 12

    如何在Windows 8.1中通过注册表设置该屏幕的颜色?

  13. 13

    FOSUserBundle,组和注册表

  14. 14

    允许其他HP产品运行测试和组件的HP UFT注册表设置吗?

  15. 15

    FOSUserBundle-用户发送注册表后如何将其保留在首页上?

  16. 16

    如何通过策略更新Windows(通过注册表)

  17. 17

    如何在FOSUserBundle中的另一个字段Symfony 2.7中添加注册表单

  18. 18

    如何还原和转储Windows注册表而不覆盖当前注册表

  19. 19

    Symfony3 FOSUserBundle填充表

  20. 20

    如何在Jetty用户表中添加和使用其他字段?

  21. 21

    无法通过注册表安装Firefox扩展

  22. 22

    如何通过阅读注册表在Inno Setup中验证用户名和密码

  23. 23

    通过将程序添加到注册表中,如何使程序在启动时运行?

  24. 24

    Docker:注册表:无法从其他人的私有注册表中提取

  25. 25

    Symfony3 表单类型,通过 id 引用其他实体

  26. 26

    如何使用触发器和其他表中的数据更新字段?

  27. 27

    如何将图像数据和其他参数从注册表单发送到 php

  28. 28

    如何向依赖于同一注册表的其他两个字段的字段添加新值?

  29. 29

    如何通过登录注册表来限制WordPress网站中的特定页面?

热门标签

归档