【发布时间】:2019-09-29 06:19:03
【问题描述】:
2021: 这实际上是包裹的问题。此后,正则表达式链接匹配已使用我为自己解决的解决方案实施。您可以在文档here 中了解它。
我正在使用 Laravel 5.8 和 AdminLTE for Laravel。
有几个选项可以创建菜单,其中之一是在我使用的提供的配置文件中创建它。
您可以在菜单中指定active 键,使菜单具有使菜单项处于活动状态并激活下拉菜单的类。
我有一个菜单项,我想在这些页面上激活它:
- /posts(与
active => ['/posts']一起使用) - /posts/{post_id}(id 只是数字)
这些 URL 不应该匹配:
- /posts/create
- /posts/anyotherlink
- /posts/1text
我不能使用/posts/*,因为这会使创建页面和其他一些页面处于活动状态。
The readme 建议您也可以使用正则表达式来执行此操作。我根本不使用正则表达式,但我来到了这个,根据regex101 似乎与我需要的匹配:
^\/posts\/[0-9]+$
我试过这样实现它:
[
'text' => 'Posts overview',
'url' => '/posts',
'icon' => 'list',
'active' => ['/posts', '^\/posts\/[0-9]+$'],
'active' => ['/posts', '/posts/[^0-9]'] // also tried this
],
不幸的是,这似乎不起作用,因为它不会使菜单项在上面列出的页面上处于活动状态。
编辑:我还在 GitHub 存储库中创建了一个问题,因为我怀疑这可能是包的问题。
我是错过了什么,还是做错了什么?
【问题讨论】:
-
试试
'active' => ['/^\/posts(?:\/\d+)?$/'] -
@WiktorStribiżew 感谢您的建议,但结果保持不变:菜单不亮。我开始认为这可能是 GitHub 上的包的问题。
-
好吧,我可能只是想指出 PHP 中的正则表达式是用正则表达式分隔符定义的,在大多数情况下添加它们就足够了。此外,
'/^\/posts(?:\/\d+)?$/'正则表达式匹配以/posts开头并立即在此处结束或具有/和1+ 数字后的字符串(可选)。也许一旦你弄清楚如何使正则表达式在这段代码中工作,它会有所帮助。
标签: php regex laravel adminlte