我在使用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
我的印象是,由于FOSUserBundle已经定义了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 }
答案 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