这是我第一次独自使用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
答案 0 :(得分:5)
我认为你扩展错误的课程,试着用:
use FOS\UserBundle\Model\User as BaseUser;
修改强>:
是的,不推荐使用FOS\UserBundle\Entity\User
,Extend 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
跳这会帮助其他人