FOSUserBundle我是否将操作代码复制到我自己的操作中

时间:2014-04-22 14:03:48

标签: symfony fosuserbundle

我在使用FOSUserBundle时遇到了一些问题。我发现文档缺乏,并认为如果他们有一个我可以下载源代码并查看的示例应用程序,它会真的有用。

我的登录路线是/Login。我已经覆盖了树枝模板,以便在我导航到我的路线时显示一个登录表单。但是我必须在LoginAction中添加一些默认值才能使其正常工作。

我的LoginAction:

/**
     * @Route("/Login", name="wx_exchange_login")
     * @Template("WXExchangeBundle:User:login.html.twig")
     * User log up - Open to public
     * Authenticates users to the system
     */
    public function loginAction()
    {
        return array('error' => 0, 'csrf_token' => 'foobar', 'last_username' => 'foobar');
    }

FOSUserBundle LoginAction

我的印象是,由于FOSU​​serBundle已经定义了Action代码,因此我不需要在loginAction中使用任何代码。从文档中我不清楚我应该在我的行动中做任何事情。我在网上看到了一些示例,显示人们已将相关FOSUserBundle操作中的代码复制到自己的操作中。

实现FOSUserBundle以将代码复制到自己的操作中的正确方法是什么?

编辑:我没有覆盖捆绑包。

编辑2:我的routing.yml与文档略有不同。我的第一个条目是:

wx_exchange:
    resource: "@WXExchangeBundle/Controller/"
    type:     annotation
    prefix:   /

其余条目如文档中所述(导入FOSUserBundle路线)。

Security.yml:

# app/config/security.yml
security:
    encoders:
        FOS\UserBundle\Model\UserInterface:
            algorithm: bcrypt
            cost: 15

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

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

    access_control:
        - { path: ^/Login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/SignUp, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/ResetPassword, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/Confirm, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/Dashboard/, role: ROLE_ADMIN }

1 个答案:

答案 0 :(得分:1)

我可能终于得到了答案。登录部分的代码确实已经在FOSUserBundle中定义。我查看了自己项目的路由,可以看到它看起来像这样:

fos_user_security_login:
    pattern: /login
    defaults: { _controller: FOSUserBundle:Security:login }

//Check a login:
fos_user_security_check:
    pattern: /login_check
    defaults: { _controller: FOSUserBundle:Security:check }
    methods: [POST]

//The logout route:
fos_user_security_logout:
    pattern: /logout
    defaults: { _controller: FOSUserBundle:Security:logout }

现在,这些路由都指向包含这些方法的bundle的SecurityController。这个类可以在/vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Controller/SecurityController.php中找到,路由可以在/ vendor / friendsofsymfony / user-bundle / FOS / UserBundle / Resources / config / routing /中找到security.xml(我在这篇文章中将其转换为YAML以便于理解)。

因此,您唯一需要做的就是在app文件夹中的路由文件中对此security.yml文件进行引用(导入)。

要回答您的问题:我不认为您需要在自己的控制器中定义这些内容,因为它们已在上述文件中定义。

如果我能找到更多细节,我会尽快发布。有一段时间我用过这个包。我现在使用内置的Symfony2元素,从长远来看,我发现它更透明。

编辑:在我自己的捆绑包的路由文件中,我有对这些XML文件的引用:

// FOSUser files
fos_user_security:
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"

fos_user_profile:
    resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
    prefix: user/profile

fos_user_register:
    resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
    prefix: user/register

fos_user_resetting:
    resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
    prefix: user/resetting

fos_user_change_password:
    resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
    prefix: user/profile