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 ''; } }

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Lorsqu'un novice SpringBoot crée un projet, le contrôleur ne peut pas être analysé et une série de problèmes sont 1.2.3.4.5.6. Une autre façon consiste à ajouter @ComponentScan(basePackages={"xxx.xxx.xx","xxx.xxx" lorsque. démarrage de la classe de service) .xx”}) est le nom complet du package, qui peut être utilisé pour plusieurs contrôleurs personnalisés SpringBoot. La route du contrôleur personnalisé SpringBoot ne peut pas être analysée et introuvable car la classe de démarrage et le package de contrôleur personnalisé. ne sont pas dans le même répertoire. Emplacement officiellement recommandé de application.java

Solution à l'échec du démarrage du docker : 1. Vérifiez l'état d'exécution, puis libérez la mémoire occupée via la commande "echo 3 > /proc/sys/vm/drop_caches" ; 2. Utilisez "$netstat -nltp|grep .. . " pour vérifier si le port a été occupé. S'il s'avère occupé après la mise en ligne, remplacez-le par un port disponible, puis redémarrez.

DJI n'a pas encore confirmé son intention d'introduire une nouvelle caméra d'action. Au lieu de cela, il semble que GoPro devancera son rival cette année, après avoir annoncé qu'elle présenterait deux nouvelles caméras d'action le 4 septembre.

Préface Dans certains cas, les préfixes du contrôleur de service sont cohérents. Par exemple, le préfixe de toutes les URL est /context-path/api/v1 et un préfixe unifié doit être ajouté à certaines URL. La solution envisageable consiste à modifier le chemin contextuel du service et à ajouter api/v1 au chemin contextuel. La modification du préfixe global peut résoudre le problème ci-dessus, mais il existe des inconvénients si l'URL a plusieurs préfixes, par exemple certains. Les URL nécessitent des préfixes. S'il s'agit de api/v2, il ne peut pas être distingué. Si vous ne souhaitez pas ajouter api/v1 à certaines ressources statiques du service, il ne peut pas être distingué. Ce qui suit utilise des annotations personnalisées pour ajouter uniformément certains préfixes d'URL. un,

Créez de nouveaux fichiers texte dans des dossiers sur Mac à l'aide d'Automator Automator est une application puissante qui vous permet d'écrire des scripts et d'automatiser. Dans ce cas, nous allons créer une action rapide Automator qui peut être exécutée depuis n'importe où dans le Finder pour créer un nouveau fichier texte à l'emplacement actuel du dossier. Ainsi, avec un peu de configuration, vous pouvez facilement accéder à la possibilité de créer de nouveaux fichiers texte à tout moment et en tout lieu. Ouvrez l'application Automator sur votre Mac et sélectionnez Créer une nouvelle "Action rapide". Utilisez la fonction de recherche et recherchez "AppleScript", puis double-cliquez ou exécuterez AppleScri.

Solution à l'erreur de démarrage du nœud : 1. Exécutez "node xx.js" directement dans le terminal ; 2. Ajoutez l'élément de démarrage "scripts": {"test": "echo \"Erreur : aucun test spécifié\" && exit 1 » ,"start": "node service.js"}"; 3. Réexécutez "npm start".

Près d'un an s'est écoulé depuis que DJI a sorti l'Osmo Action 4 (299 $ actuels sur Amazon). Depuis lors, la société s'est concentrée sur ses autres divisions, notamment les nouveaux cardans de caméra RS. En plus de cela, il a également introduit divers drones comme l'Avata.

Lorsque vous utilisez le framework PHP, vous rencontrez souvent des erreurs telles que "PHPFatalerror: Class'Controller'notfound". Ce genre d'erreur est généralement liée à la dénomination, à l'emplacement ou au chargement des fichiers dans le framework, notamment lorsque vous essayez d'utiliser des contrôleurs. Cet article présentera plusieurs méthodes de traitement courantes pour résoudre ce problème. Confirmer l'emplacement du fichier Tout d'abord, vous devez confirmer que le fichier du contrôleur se trouve dans le répertoire approprié pour le framework. Par exemple, si vous utilisez le framework Laravel
