PHP反照小试: 提取控制器的action方法
PHP反射小试: 提取控制器的action方法
<?php /** * Acl 资源查询器 * * 在指定的 控制器目录中查找 对应的: * * 控制器 以及其 action 列表 * 并对 控制器 已经action 注释中的 @aclres-finder-desc{ 你的注释 }aclres-finder-desc@ * 做自动提取 * * 开发者只需在 控制器类文件中 进行对应的标述,即可... 基本就解决了 手动提取的工作了 :-) * * @author 色色 * @version 0.1 * */ class Pkg_Reflection_AclResource_Searcher { static function loadControllerList($basepath){ $paths = Core_AppUtils::recursion_glob($basepath,'*.php'); if (empty($paths)) return array(); foreach ($paths as $k => $v){ // 1. 去掉基准路径 $v = str_replace($basepath,'',$v); // 2. 去掉后缀 $v = preg_replace('/\.php$/i','',$v); // 3. 拆分过滤 $v = Core_AppUtils::normalize($v,DIRECTORY_SEPARATOR); if (empty($v)) continue; $paths[$k] = implode('_',$v); } $d = array(); foreach ($paths as $controller){ $d[$controller] = self::getActionListFromControllerClass($controller); } return $d; } static function getActionListFromControllerClass($controller_name){ static $controllerClassPrefix = null; if (!$controllerClassPrefix) { $controllerClassPrefix = Core_App::ini('mvc/web/dispatcher/controllerClassPrefix','Core_Controller_'); } $clazz = "{$controllerClassPrefix}{$controller_name}"; Core_Autoloader::loadClass($clazz,true); $obj = new ReflectionClass($clazz); $d = array(); $publicMethods = $obj->getMethods(ReflectionMethod::IS_PUBLIC); foreach ($publicMethods as $method){ if (preg_match('/^action/i',$method->name)) { $action_name = preg_replace('/^action/i','',$method->name); $rmd = Core_Mvc_Router::resourceEncode($controller_name,$action_name); $q = array_shift($rmd); $d[$q] = self::getAclResourceDescription($method->getDocComment()); } } return array( 'description' => self::getAclResourceDescription($obj->getDocComment()), 'actions' => $d ); } static function getAclResourceDescription($finder){ static $tagfinder_start = '@aclres-finder-desc{'; static $tagfinder_end = '}aclres-finder-desc@'; if (empty($finder)) return ''; $start = stripos($finder,$tagfinder_start); if ($start){ $end = stripos($finder,$tagfinder_end); if ($end && $end > $start){ // 只有闭合的标签才行 $start = $start+strlen($tagfinder_start); return trim(substr($finder,$start,$end-$start)); } } return ''; } }

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

SpringBoot小白创建项目,扫描不到Controller一系列问题1.2.3.4.5.6.还有一种办法是在启动服务类的入门,添加@ComponentScan(basePackages={“xxx.xxx.xx”,“xxx.xxx.xx”})里面的是包的全限定名,可以为多个SpringBoot自定义controller无法扫描到SpringBoot自定义controller路由找不到,原因是启动类和自定义的Controller包不在同一级目录下。官方建议application.java放的位

docker start起不来的解决办法:1、检查运行状态,然后通过“echo 3 > /proc/sys/vm/drop_caches”命令释放被占用的内存;2、通过“$netstat -nltp|grep ...”命令检查端口是否已经被占用,如果上线后发现占有,则改为可用端口再重启即可。

大疆尚未确认推出新运动相机的计划。相反,GoPro 今年似乎会领先于竞争对手,并透露将于 9 月 4 日推出两款新的运动相机。

前言在某些情况下,服务的controller中前缀是一致的,例如所有URL的前缀都为/context-path/api/v1,需要为某些URL添加统一的前缀。能想到的处理办法为修改服务的context-path,在context-path中添加api/v1,这样修改全局的前缀能够解决上面的问题,但存在弊端,如果URL存在多个前缀,例如有些URL需要前缀为api/v2,就无法区分了,如果服务中的一些静态资源不想添加api/v1,也无法区分。下面通过自定义注解的方式实现某些URL前缀的统一添加。一、

使用Automator在Mac上的文件夹中创建新文本文件Automator是一款功能强大的应用程序,可让您编写脚本并实现自动化。在这种情况下,我们将创建一个Automator快速操作,它可以从Finder中的任何位置运行,以在当前文件夹位置创建一个新的文本文件。因此,只需稍加设置,您就可以随时随地轻松访问创建新文本文件的能力。在Mac上打开Automator应用程序,然后选择创建一个新的“快速操作”使用搜索功能并搜索“AppleScript”,然后双击或将运行AppleScri

node start报错的解决办法:1、直接在终端执行“node xx.js”;2、添加start启动项“ "scripts": {"test": "echo \"Error: no test specified\" && exit 1","start":"node service.js"}”;3、重新执行“npm start”即可。

自 DJI 发布 Osmo Action 4(亚马逊售价 299 美元)以来已经过去了近一年。从那时起,该公司开始专注于其他部门,包括新型 RS 相机万向节。最重要的是,它还推出了各种无人机,例如 Avata

在使用PHP框架时,经常会遇到诸如“PHPFatalerror:Class'Controller'notfound”的错误。这种错误通常与框架中文件的命名、位置或加载有关,特别是当你尝试使用控制器时。本文将介绍几种常见的处理方法来解决这个问题。确认文件位置首先,你需要确认控制器文件是否位于框架的正确目录中。例如,如果你使用的是Laravel框架
