使用 symfony 4 创建后台和前台应用程序的最佳方式

Best Way to create a back and front office application with symfony 4

我正在创建一个有前台和后台的新应用程序,我的后台办公室提供了创建社会的可能性,而那些在后台创建的社会应该提供在 url前面,不知道怎么弄,..

我试过像这样修改我的 security.yml =>

access_control:
        - { path: ^/\w+/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/login_admin, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_USER }
        - { path: ^/admin, roles: ROLE_ADMIN }

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

我目前正在尝试识别前面 url 中的社会,就像这样(在我的 config/routes.yaml 中)=>

salarie_index:
    path: /{_clientname}/*

它工作正常,但是,当我尝试访问我的 bak 办公室时,它现在被认为是一个社会 >__<"

我希望能够在我的路由中指定如果客户端名称是 "admin",那么它不应该映射到这条路由,...

虽然我不清楚你想要达到什么目的,但你似乎把它复杂化了。是什么让您无法选择不同的路线?

您可以只为您的管理员提供一条路线:/admin

以及贵公司(社会)的另一条路线:/company/{_clientname}

对不起,

我不能这样做,因为我的后台不依赖于公司,这意味着我在 url 中根本不需要公司,而在 url 中则相反前面的,...

事实上,我认为我可以使用那里的配置 =>

routes.yml =>

#index:
#    path: /
#    controller: App\Controller\DefaultController::index

admin:
    resource: "../../src/Controller/Admin/"
    type: annotation
    prefix: '/admin'

salarie:
    resource: "../../src/Controller/Salarie/"
    type: annotation
    prefix: '/{_clientname}'
    requirements:
        _clientname: '^((\w+))+'
        #_clientname: '^(((?!admin).)(\w+))+'

还有这个 security.yml :

security:
    encoders:
        App\Entity\User:
            algorithm: auto
        App\Entity\Salarie:
            algorithm: auto


    # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
    providers:
        # used to reload user from session & other features (e.g. switch_user)
        app_salarie_provider:
            entity:
                class: App\Entity\Salarie
                property: email
        app_admin_provider:
            entity:
                class: App\Entity\AdminUser
                property: email
        # used to reload user from session & other features (e.g. switch_user)
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|ico|js)/
            security: false
        admin_area:
            anonymous: true
            pattern: ^/admin
            provider: app_admin_provider
            form_login:
                provider: app_admin_provider
                login_path: login_admin
                username_parameter: sign_in[email]
                password_parameter: sign_in[password]
                check_path: login_check_admin
            logout:
                path: /logout_admin
                target: /admin
        salarie:
            anonymous: true
            pattern: ^/\w+
            form_login:
                provider: app_salarie_provider
                login_path: login_salarie
                username_parameter: sign_in[email]
                password_parameter: sign_in[password]
                check_path: login_check_salarie
            logout:
                path: /logout
                target: /

            # activate different ways to authenticate
            # https://symfony.com/doc/current/security.html#firewalls-authentication

            # https://symfony.com/doc/current/security/impersonating_user.html
            # switch_user: 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: ^/\w+/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, roles: ROLE_ADMIN }
        - { path: ^/, roles: ROLE_USER }
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

有了这些文件,我似乎得到了我想要的结果!

无论如何谢谢你的回答,祝你有美好的一天o/