【问题标题】:How to specify route dynamicly by route name in security.yaml?如何通过security.yaml中的路由名称动态指定路由?
【发布时间】:2019-10-07 00:25:40
【问题描述】:

我使用 Symfony4。我想通过路由名称来指定登录页面的 URL 路由,在routes.yaml 中声明

现在我的security.yaml 中有这些行:

access_control:
    - { path: ^/login, allow_if: 'is_anonymous()'}
    - { path: ^/, roles: ROLE_USER}

在我的routes.yaml 我有这个:

login:
    path: /anyrouteiwant   
    controller: App\Controller\SecurityController::login

我想要的是引用路由名称'login'

【问题讨论】:

  • 在security.yaml中是不行的,可以在controller中试试。检查symfony security
  • 是的,我可以。但是我应该将 security.yaml access_control 中的逻辑删除到 Controller 的注释中。如果我需要关闭匿名用户的所有页面,则将低优先级角色的限制写入应该是ROLE_USER+ 可访问的每个控制器。 (另外,我不希望登录用户陷入登录页面)。而且,可以肯定的是,我只能为 anonymous 指定权限,并在控制器操作中动态引用 login
  • 但最好在 security.yaml 中执行此操作。 However, Thank you!

标签: php symfony routing symfony4


【解决方案1】:

使用环境变量怎么样?

.env.dev 文件(也是测试和产品)

LOGIN_PATH="/login"

security.yaml文件

access_control:
    - { path: '^%env(LOGIN_PATH)%', allow_if: 'is_anonymous()'}
    - { path: ^/, roles: ROLE_USER}

routes.yaml文件:

login:
    path: '%env(LOGIN_PATH)%'
    controller: App\Controller\SecurityController::login

不知道它是否会起作用,但它应该起作用。

参考:https://symfony.com/doc/current/configuration/environment_variables.html#environment-variable-processors

否则,您似乎无法在security.yaml 文件中引用路由配置。要自己测试,请输入:

var_dump($this->parameters);

vendor\symfony\dependency-injection\ParameterBag\ParameterBag.php line 71里面,就在get($name)方法的开头,运行的时候可以看到定义的参数:

php bin/console config:dump-reference security

命令。并且参数包中似乎没有定义与定义的路由相关的参数。

【讨论】:

  • 好吧,这是一个引用的例子,但这不是我想要的。我需要引用已声明的 route.yaml 中的变量。
  • Symfony 4.1routes.yaml 中测试这个会产生\Symfony\Component\DependencyInjection\Exception\RuntimeException Using "%env(VARNAME)%" is not allowed in routing configuration 由修复this issue 引入
  • @vike,你能创建一个来自 env 的参数,然后在 routes.yaml 中使用它吗?
  • @TahaPaksu,是的;在services.yaml 中定义parameters: routename_name: routenameroutename_path: /routepath,并在routes.yaml 中使用'%routename_name%': path: '%routename_path%',它可以工作(除了虚拟示例),谢谢。顺便说一句,我最初希望在单点定义 route + security 的句柄时选择了注释...
猜你喜欢
  • 2020-12-13
  • 2012-12-25
  • 2020-08-06
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多