Symfony 4 fosuserbundle

Posted

技术标签:

【中文标题】Symfony 4 fosuserbundle【英文标题】: 【发布时间】:2018-05-30 09:49:00 【问题描述】:

我从 Symfony 4 开始,我想通过这个链接安装 FosUserBundle: https://symfony.com/doc/master/bundles/FOSUserBundle/index.html

第一:

我的问题是我不知道在哪里可以找到“app/config/config.yml”文件来取消注释翻译器和配置:

fos_user:
db_driver: orm # other valid values are 'mongodb' and 'couchdb'
firewall_name: main
user_class: AppBundle\Entity\User
from_email:
    address: "%mailer_user%"
    sender_name: "%mailer_user%"

第二:

我认为我必须在“config/packages/”目录中创建security.yml文件,对吗?

第三:

在哪个文件中添加路由?

你能帮帮我吗? :)

【问题讨论】:

据我所知,FOSUserBundle 仍然不支持 Symfony 4 :( 一方面,FOSUserBundle 是目前使用最广泛的第三方捆绑包。另一方面,它的历史很大程度上是无人维护和过度设计的。除非你真的真的需要支持多种类型的数据库,否则你最好遵循 Symfony 文档并实现自己的系统。这真的没什么,你会学到很多东西。 不是对您的建议@Cerad 的批评,我认为这是适合大型项目的方式,但 OP 还应注意他会错过许多与 FOSUser 集成的其他捆绑包。 @DonOmondi 是的,还有其他依赖 FOSUserBundle 的包。唉,我对他们也不是很满意。我偶尔会查看他们的代码并从他们那里窃取想法,但避免实际使用它们。 【参考方案1】:

目前你不能在 Symfony4 上使用 FOSUSerBundle。支持尚未合并。可以关注开发here。

【讨论】:

几天后支持已合并到 master,但尚未标记。如果你喜欢生活在最前沿并且等不及它,你可以使用它来设置你对 dev-master 的依赖:P github.com/FriendsOfSymfony/FOSUserBundle/pull/2639【参考方案2】:

如果你想在 Symfony4 中使用 FOSUserBundle,你可以试试 Ryan 提供的补丁 here。

【讨论】:

【参考方案3】:

这是我发现可行的解决方案。

第一:

app/config/config.yml 不再存在,而是将配置移至配置文件夹。对于 FOS 用户包,正确的位置是:/config/packages/fos_user.yaml。如前所述,使用 dev-master 版本 FOSUserBundle,它支持 4(还有一些工作正在进行中,但已经足够好了)。

第二:

你是对的,一个简单的解决方案是做一个composer require security,食谱会为你解决这个问题。 https://symfony.com/doc/current/security.html 了解更多信息。

第三:

默认的 FOS 用户捆绑路由:

fos_user:
    resource: "@FOSUserBundle/Resources/config/routing/all.xml"

有关 FOS 路由(第 6 步)的更多信息很有帮助 https://symfony.com/doc/master/bundles/FOSUserBundle/index.html

另外,我建议查看 symfony 路由文档中的 yaml 示例。在配置与 FOS 用户捆绑相关的路由时,这可能会让事情变得更加清晰。 https://symfony.com/doc/current/routing.html

【讨论】:

@DarraghEnright Fos 用户包 2.1 现在支持 symfony 4。我推荐使用它。我确实收到了配方错误,但是一旦您最初设置了捆绑包,就很容易解决。【参考方案4】:

好的,我有同样的问题,应该是这样的 首先:正如@sean Baharmi 所说,您应该像这样创建 /config/packages/fos_user.yaml 和内部配置

fos_user:
  db_driver: orm
  firewall_name: main
  user_class: App\Entity\Users
  from_email:
      address: "hello@youmail.com"
      sender_name: "Sender Name"

然后在 framework.yaml 中您应该输入以下内容,因为 FOSUserBundle 依赖项

templating:
  engines: ['twig', 'php']

也可以在 /config/rourtes/routes.yaml 中添加路由

fos_user:
    resource: "@FOSUserBundle/Resources/config/routing/all.xml"

然后就可以工作了

希望对你有用

【讨论】:

【参考方案5】:

我已经解决了这个问题:

    使用 composer 下载 FOSUserBundle:

    作曲家需要friendsofsymfony/user-bundle "~2.0"

在安装结束时,您将收到以下错误消息:

必须配置路径“fos_user”的子节点“db_driver”。

    创建您的用户类 创建 src/Entity/User.php 作为扩展 FOSUserBundle BaseUser 类的自定义用户类。
 <?php
//src/Entity/User.php

namespace App\Entity;

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

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_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
    

    配置应用程序的 security.yml 修改 config/packages/security.yaml 以设置 FOSUserBundle 安全性
    security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        fos_userbundle:
            id: fos_user.user_provider.username

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_token_generator: security.csrf.token_manager

            logout:       true
            anonymous:    true

    # Easy way to control access for large sections of your site
    # Note: Only the *first* access control that matches will be used
    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 
    配置 FOSUserBundle 新建文件config/packages/fos_user.yaml,用于配置FOSUserBundle
fos_user:
db_driver: orm # other valid values are 'mongodb' and 'couchdb'
firewall_name: main
user_class: App\Entity\User
from_email:
    address: "vincent@vfac.fr"
    sender_name: "vincent@vfac.fr"

更新 config/packages/framework.yaml 以添加模板配置

framework:
    templating:
        engines: ['twig', 'php']
    导入 FOSUserBundle 路由 创建 config/routes/fos_user.yaml
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
    更新您的数据库架构 如果尚未完成,您必须创建数据库

php bin/控制台原则:数据库:创建

使用来自您的用户类实体的信息更新架构

php bin/console 原则:schema:update --force

至此,在 Symfony 4 中,一切都已安装并配置为使用 FOSUserBundle。运行以下命令检查是否一切正常

作曲家更新

如果你没有任何错误信息,你可以测试! 您可以运行 Web 服务器来测试您的应用程序

php bin/控制台服务器:启动

全部教程here: https://vfac.fr/blog/how-install-fosuserbundle-with-symfony-4

【讨论】:

目前最好(最详细、最完整)的答案 非常感谢!你拯救了我的一天 谢谢哥们,帮了我大忙!

以上是关于Symfony 4 fosuserbundle的主要内容,如果未能解决你的问题,请参考以下文章

从 Symfony 3.4 迁移到 Symfony 4.4 后,自定义投票器无法按预期工作

Symfony 4.4 - Swift Mailer 安装失败

Symfony 4.4 / NelmioApiDocBundle 4.0.1 注释问题

如何使用 symfony 4 创建登录验证表单

为啥要安装 symfony 版本 4? [复制]

Symfony 4 不自动装配动态路由控制器