From 8395c4f00b462829337b5075383263de574d2ca0 Mon Sep 17 00:00:00 2001 From: 9007967 <33853639+9007967@users.noreply.github.com> Date: Wed, 6 Oct 2021 11:41:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=8E=BB=E9=99=A4=E5=A4=9A?= =?UTF-8?q?=E5=B1=82=E6=8E=A7=E5=88=B6=E5=99=A8=E9=BB=98=E8=AE=A4=E5=89=8D?= =?UTF-8?q?=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 多层控制器通过controller获取的时候会出现 name.controller 这种问题,利用多层控制器做api版本切换的时候权限表记录的都是 应用名+控制器名+方法名(api::common::sendSms) 实际获取的话会出现 api::v1.common::sendSms 每次切换api版本的时候 都要批量修改权限表路由字段 更换v1为v2 为了更方便的使用 在特定场景直接 获取到api::common::sendSms来匹配用户是否有权限 不受版本号影响 用法: PHP<8 $request->controller(true,true); PHP>=8 $request->controller(prefix:true); 第一个true是将控制器转换为小写 第二个true是去除前缀 --- src/think/Request.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/think/Request.php b/src/think/Request.php index 1c15f63619..16f33a4109 100644 --- a/src/think/Request.php +++ b/src/think/Request.php @@ -1875,11 +1875,15 @@ public function setAction(string $action) * 获取当前的控制器名 * @access public * @param bool $convert 转换为小写 + * @param bool $prefix 去除多层控制器前缀 * @return string */ - public function controller(bool $convert = false): string + public function controller(bool $convert = false, bool $prefix = false): string { $name = $this->controller ?: ''; + if ($prefix and strpos($name, '.')) { + $name = substr($name, strripos($name, '.') + 1); + } return $convert ? strtolower($name) : $name; }