【问题标题】:FOSUserBundle extend propel UserFOSUserBundle 扩展推进用户
【发布时间】:2013-05-16 11:13:44
【问题描述】:

我在Symfony 2.2 项目中使用FOSUserBundlePropel。我正在尝试扩展 User 类并向其添加一个新方法,如下所示:

namespace Acme\UserBundle\Model;

use FOS\UserBundle\Propel\User as BaseUser;

class User extends BaseUser
{
    protected $id;

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

    public function hasPermission($topic) {
        // TODO check if $topic has permission
        return TRUE;
    }
}

问题是在控制器中调用$this->getUser()时,返回的对象的类是FOS\UserBundle\Propel\User,所以hasPermission()是未定义的。

我尝试在自定义类的构造函数中抛出异常,注册新用户时似乎使用了它。但我猜它没有保存为Acme\UserBundle\Model\User

我在另一个项目中对Doctrine 进行了尝试,它在调用$this->getUser() 时返回了正确的类。难道我做错了什么?如何让它与 Propel 一起使用?

config.yml:

fos_user:
    db_driver: propel
    firewall_name: main
    user_class: Acme\UserBundle\Model\User

security.yml:

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username

    firewalls:
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
            logout:       true
            anonymous:    true

    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }

【问题讨论】:

    标签: symfony propel fosuserbundle


    【解决方案1】:

    我安装了GlorpenPropelBundle,在 config.yml 中添加了几行代码。

    config.yml

    propel:
        classname: Glorpen\Propel\PropelBundle\Connection\EventPropelPDO
        build_properties:
            propel.behavior.event.class:    'vendor.glorpen.propel-bundle.Glorpen.Propel.PropelBundle.Behaviors.EventBehavior'
            propel.behavior.extend.class:   'vendor.glorpen.propel-bundle.Glorpen.Propel.PropelBundle.Behaviors.ExtendBehavior'
            propel.behavior.default:        "event, extend"
    
    glorpen_propel:
        extended_models:
            FOS\UserBundle\Propel\User: Acme\UserBundle\Model\User
    

    $this->getUser() 现在返回 Acme\UserBundle\Model\User

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多