【问题标题】:Symfony 4 fosuserbundleSymfony 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 的包。唉,我对他们也不是很满意。我偶尔会查看他们的代码并从他们那里窃取想法,但避免实际使用它们。

标签: symfony fosuserbundle


【解决方案1】:

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

【讨论】:

【解决方案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】:

      我已经解决了这个问题:

      1. 使用 composer 下载 FOSUserBundle:

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

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

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

      1. 创建您的用户类 创建 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
          }
      }
      
      1. 配置应用程序的 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 }
      
      1. 配置 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']
      
      1. 导入 FOSUserBundle 路由 创建 config/routes/fos_user.yaml
      fos_user:
      resource: "@FOSUserBundle/Resources/config/routing/all.xml"
      
      1. 更新您的数据库架构 如果尚未完成,您必须创建数据库

      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

      【讨论】:

      • 目前最好(最详细、最完整)的答案
      • 非常感谢!你拯救了我的一天
      • 谢谢哥们,帮了我大忙!
      猜你喜欢
      • 2019-07-16
      • 2020-11-11
      • 2019-03-13
      • 2018-09-29
      • 2019-01-06
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      相关资源
      最近更新 更多