cakephp-3.0 - CakePHP 控制器的静态名称
问题描述
我可能在这里遗漏了一些非常明显的东西,但是CakePHP
(我在 3.8 上)中是否有一个函数可以返回控制器的名称而不创建类的实例?
实例化控制器可以调用此函数:
echo $this->name;
但我希望能够做的是避免将控制器名称作为字符串输入,例如HTML->link()
,即静态调用类似于:
echo $this->Html->link(
'Dashboard',
['controller' => DashboardsController::name, 'action' => 'index']
);
原因是我正在重构几个控制器,并且不得不手动查找和替换所有这些字符串。我来自一个.Net
背景并且CakePHP
对我来说很新,所以如果有比我提出的问题更好(更蛋糕)的方式来进行重构,那么我会很高兴听到它。
文件中的任何内容都没有对我产生影响,但我觉得应该有一个简单的答案。
解决方案
可以使用::class
属性检索类的名称空间。查看以下示例:
DashboardsController::class // Cake/Controllers/DashboardController
没有命名空间的名称可以通过以下方式检索ReflectionClass
:
$function = new \ReflectionClass(DashboardsController::class);
var_dump($function->inNamespace());
var_dump($function->getShortName());
Shortname 可用于获取没有命名空间的类:
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
推荐阅读
- javascript - 如何一键将计数器从 1、2 增加到 3?
- reactjs - 如何理解 react 中的 useRef
- react-native - R8:程序类型已经存在:io.invertase.firebase.BuildConfig 在 React Native 应用程序中反应
- html - 角度如何在关闭和打开导航栏时调整ngx-datatable的大小
- c# - gRpc Unity3D 客户端和 ASP.Net 核心服务器中的异常“无法连接到所有地址”
- angular - angular-datatables 在本地工作,但在生产中不工作
- flutter - 为什么当我向 Column 添加更多小部件时,带有扩展小部件中包装的图像的 Container 小部件会变小?
- javascript - ReactJS:使用表单中的值 - 单选按钮
- node.js - 部署到 Netify 成功后的超时任务
- python - 访问随机 CV 搜索中所有迭代的所有结果