CakePHP 控制器的静态名称

CakePHP static name of controller

我可能在这里遗漏了一些非常明显的东西,但是 CakePHP 中是否有一个函数(我在 3.8 上) returns 控制器的名称而不创建控制器的实例class?

实例化控制器可以调用这个函数:

echo $this->name;

但我希望能够做的是避免在 HTML->link() 中输入控制器名称作为字符串;即静态调用类似于:

echo $this->Html->link(
    'Dashboard',
    ['controller' => DashboardsController::name, 'action' => 'index']
);

原因是我正在重构几个控制器并且必须手动查找并替换所有这些字符串。我来自 .Net 背景并且 CakePHP 对我来说很新,所以如果有比我问的问题更好(更简单)的重构方法,那么我会听了真高兴。

文档中没有任何内容对我有所启发,但我感觉应该有一个简单的答案。

可以使用 ::class 属性 检索 class 的名称空间。查看以下示例:

 DashboardsController::class // Cake/Controllers/DashboardController

不带命名空间的名称可以用ReflectionClass检索:

$function = new \ReflectionClass(DashboardsController::class);

var_dump($function->inNamespace());
var_dump($function->getShortName());

短名称可用于获取 class 不带命名空间:

namespace App;

class Test {
   public static function name(){
      $function = new \ReflectionClass(self::class);

      return $function->getShortName();
   } 
}

var_dump(Test::name());

查看文档:https://www.php.net/manual/en/language.oop5.constants.php#example-186 反思:https://www.php.net/manual/en/reflectionclass.getname.php