FOS UserBundle - >无法创建新用户

时间:2014-06-03 10:09:20

标签: symfony fosuserbundle extend

这是我第一次独自使用Symfony2,我认为在配置FOS用户包时我犯了一个错误。 看起来我的用户实体没有正确扩展FOS \ UserBundle \ Entity \ User。

这是我的用户类(基本上与文档中提到的相同)

<?php
// src/Acme/UserBundle/Entity/User.php

namespace VillaPrivee\UserBundle\Entity;

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


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

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}

由于我使用Netbeans,我可以“按住Ctrl键”并确保“FOS \ UserBundle \ Entity \ User”存在。 到目前为止,我没有看到任何错误...

但是当我尝试使用终端创建新用户时,我收到此错误:

Fatal error: Call to undefined method VillaPrivee\UserBundle\Entity\User::setUsername() 
in /Applications/MAMP/htdocs/VillaPrivee/vendor/friendsofsymfony/
user-bundle/FOS/UserBundle/Util/UserManipulator.php on line 50

不确定我应该为您提供哪些其他详细信息,如果在这种情况下任何其他文件可能有问题,请告诉我。

感谢您的帮助!

编辑:

<?php

namespace VillaPrivee\UserBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class VillaPriveeUserBundle extends Bundle
{
    public function getParent()
    {
        return 'FOSUserBundle';
    }
}

config.yml:

fos_user:
    db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel'
    firewall_name: main
    user_class: VillaPrivee\UserBundle\Entity\User

3 个答案:

答案 0 :(得分:5)

我认为你扩展错误的课程,试着用:

use FOS\UserBundle\Model\User as BaseUser;

修改

是的,不推荐使用FOS\UserBundle\Entity\UserExtend FOS\UserBundle\Model\User directly. Documentation

答案 1 :(得分:0)

万一有人得到了和我一样的问题,我发现问题出在哪里:我使用的是Mac,但是并不想使用嵌入式PHP服务器遇到麻烦。所以我决定使用MAMP ......巨大的错误! 我尝试使用终端的所有东西都试图访问默认的PHP而不是MAMP ... 基本上,我不得不删除MAMP并升级我的Mac PHP,以便我可以将它与Symfony一起使用。 对不起,如果我不清楚,但我自己并不是真的理解这一切......

PS:对于那些使用MAMP的人,不要像我一样愚蠢:你的项目文件夹存储在你的MAMP应用程序文件夹中。所以如果你把它丢弃了,你就会同时把你所有的项目都丢弃......是的,我还在哭呢!

答案 2 :(得分:0)

我也遇到过这个问题。这段视频真的帮助了我。 https://knpuniversity.com/screencast/fosuserbundle-ftw

在AppKernel.php中

这是我的错误:

 $bundles = array(
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        new Symfony\Bundle\TwigBundle\TwigBundle(),
        new Symfony\Bundle\MonologBundle\MonologBundle(),
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
        new Symfony\Bundle\AsseticBundle\AsseticBundle(),
        new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new AppBundle\AppBundle(),
        new FOS\UserBundle\FOSUserBundle(),
        new \Acme\UserBundle\Entity\User()
    );

这是问题 new \ Acme \ UserBundle \ Entity \ User()

关注视频,你会发现你需要这样的东西

$bundles = array(
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        new Symfony\Bundle\TwigBundle\TwigBundle(),
        new Symfony\Bundle\MonologBundle\MonologBundle(),
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
        new Symfony\Bundle\AsseticBundle\AsseticBundle(),
        new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new AppBundle\AppBundle(),
        new FOS\UserBundle\FOSUserBundle(),
        new \Acme\UserBundle\AcmeUserBundle()
    );

这是AcmeUserBundle类:

// src/Acme/UserBundle/AcmeUserBundle.php
namespace Acme\UserBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AcmeUserBundle extends Bundle
{
}

UserBundle \ Entity \ User类与文档中的相似

我在视图中看到的最后一件事是config.yml中的 orm:条目请注意 auto_mapping:true

doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
    orm:
        default_entity_manager: default
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true

跳这会帮助其他人