Heim Backend-Entwicklung PHP-Tutorial PHP反照小试: 提取控制器的action方法

PHP反照小试: 提取控制器的action方法

Jun 13, 2016 pm 01:20 PM
action controller finder start

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 '';
	}
	
}
Nach dem Login kopieren
?

1 楼 vb2005xu 2012-05-31  
http://www.php10086.com/page/3 不错的博客

2 楼 vb2005xu 2012-05-31  
http://opauth.org/

3 楼 vb2005xu 2012-06-01  
http://www.shejidaren.com/category/css
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So lösen Sie das Problem, dass SpringBoot den Controller nicht scannen kann So lösen Sie das Problem, dass SpringBoot den Controller nicht scannen kann May 14, 2023 am 08:10 AM

Wenn ein SpringBoot-Neuling ein Projekt erstellt, kann der Controller nicht gescannt werden und es treten eine Reihe von Problemen auf. 1.2.3.4.5.6 Eine andere Möglichkeit besteht darin, @ComponentScan(basePackages={"xxx.xxx.xx",xxx.xxx" hinzuzufügen Starten der Dienstklasse) .xx“}) ist der vollständig qualifizierte Name des Pakets, der für mehrere benutzerdefinierte SpringBoot-Controller verwendet werden kann. Die benutzerdefinierte SpringBoot-Controller-Route kann nicht gescannt werden und kann nicht gefunden werden, da die Startklasse und das benutzerdefinierte Controller-Paket vorhanden sind liegen nicht im selben Verzeichnis. Offiziell empfohlene Platzierung von application.java

Was soll ich tun, wenn Docker Start nicht gestartet werden kann? Was soll ich tun, wenn Docker Start nicht gestartet werden kann? Oct 21, 2022 pm 03:43 PM

Lösung für Docker-Startfehler: 1. Überprüfen Sie den Betriebsstatus und geben Sie dann den belegten Speicher über den Befehl „echo 3 &gt; /proc/sys/vm/drop_caches“ frei. 2. Verwenden Sie „$netstat -nltp|grep ..“. "-Befehl, um zu überprüfen, ob der Port belegt ist. Wenn nach dem Online-Gehen festgestellt wird, dass er belegt ist, ändern Sie ihn in einen verfügbaren Port und starten Sie neu.

DJI Osmo Action 5 Pro: Veröffentlichungsdatum diskutiert, da Einzelhändler Einführungspreise bekannt gibt, die unter denen der GoPro Hero 13 Black liegen könnten DJI Osmo Action 5 Pro: Veröffentlichungsdatum diskutiert, da Einzelhändler Einführungspreise bekannt gibt, die unter denen der GoPro Hero 13 Black liegen könnten Sep 04, 2024 am 06:51 AM

DJI hat noch keine Pläne zur Einführung einer neuen Action-Kamera bestätigt. Stattdessen scheint es, dass GoPro in diesem Jahr seinem Rivalen einen Schritt voraus sein wird, nachdem angekündigt wurde, dass es am 4. September zwei neue Action-Kameras vorstellen wird. Zum Vergleich: Diese werden voraussichtlich a

So fügen Sie SpringBoot-Multicontrollern ein URL-Präfix hinzu So fügen Sie SpringBoot-Multicontrollern ein URL-Präfix hinzu May 12, 2023 pm 06:37 PM

Vorwort In einigen Fällen sind die Präfixe im Service-Controller konsistent. Beispielsweise lautet das Präfix aller URLs /context-path/api/v1, und einigen URLs muss ein einheitliches Präfix hinzugefügt werden. Die denkbare Lösung besteht darin, den Kontextpfad des Dienstes zu ändern und api/v1 zum Kontextpfad hinzuzufügen. Durch Ändern des globalen Präfixes kann das oben genannte Problem gelöst werden, es gibt jedoch einige Nachteile URLs erfordern Präfixe. Wenn es sich um api/v2 handelt, kann es nicht unterschieden werden. Wenn Sie api/v1 nicht zu einigen statischen Ressourcen im Dienst hinzufügen möchten, kann es nicht unterschieden werden. Im Folgenden werden benutzerdefinierte Anmerkungen verwendet, um bestimmte URL-Präfixe einheitlich hinzuzufügen. eins,

So erstellen Sie Textdateien in Ordnern auf dem Mac So erstellen Sie Textdateien in Ordnern auf dem Mac Apr 15, 2023 pm 01:52 PM

Erstellen Sie mit Automator neue Textdateien in Ordnern auf dem Mac. Automator ist eine leistungsstarke Anwendung, mit der Sie Skripts schreiben und automatisieren können. In diesem Fall erstellen wir eine Automator-Schnellaktion, die von überall im Finder ausgeführt werden kann, um eine neue Textdatei am aktuellen Ordnerspeicherort zu erstellen. Mit ein wenig Einrichtung können Sie also jederzeit und überall problemlos auf die Möglichkeit zugreifen, neue Textdateien zu erstellen. Öffnen Sie die Automator-App auf Ihrem Mac und wählen Sie „Neue „Schnellaktion“ erstellen“. Verwenden Sie die Suchfunktion und suchen Sie nach „AppleScript“. Doppelklicken Sie dann auf oder, um AppleScri auszuführen

Was tun, wenn der Knotenstart einen Fehler meldet? Was tun, wenn der Knotenstart einen Fehler meldet? Dec 29, 2022 pm 01:55 PM

Lösung für den Knotenstartfehler: 1. Führen Sie „node xx.js“ direkt im Terminal aus. 2. Fügen Sie das Startup-Element „scripts“ hinzu: {“test“: „echo \“Fehler: kein Test angegeben\“ && Exit 1“ ,“start“: „node service.js“}“; 3. Führen Sie „npm start“ erneut aus.

Die neue DJI Osmo-Actionkamera wurde vor der voraussichtlichen Markteinführung im Sommer 2024 gesichtet und kann mit den jüngsten GoPro- und Insta360-Versionen mithalten Die neue DJI Osmo-Actionkamera wurde vor der voraussichtlichen Markteinführung im Sommer 2024 gesichtet und kann mit den jüngsten GoPro- und Insta360-Versionen mithalten Jul 01, 2024 am 09:49 AM

Fast ein Jahr ist vergangen, seit DJI den Osmo Action 4 (aktuell 299 $ bei Amazon) herausgebracht hat. Seitdem konzentriert sich das Unternehmen auf seine anderen Geschäftsbereiche, darunter neue RS-Kamerakardanringe. Darüber hinaus wurden verschiedene Drohnen wie die Avata eingeführt

Lösung für PHP Schwerwiegender Fehler: Klasse „Controller' nicht gefunden Lösung für PHP Schwerwiegender Fehler: Klasse „Controller' nicht gefunden Jun 22, 2023 pm 03:13 PM

Bei der Nutzung des PHP-Frameworks kommt es häufig zu Fehlern wie „PHPFatalerror: Class‘Controller‘notfound“. Diese Art von Fehler hängt normalerweise mit der Benennung, dem Speicherort oder dem Laden von Dateien im Framework zusammen, insbesondere wenn Sie versuchen, Controller zu verwenden. In diesem Artikel werden mehrere gängige Verarbeitungsmethoden zur Lösung dieses Problems vorgestellt. Speicherort der Datei bestätigen Zunächst müssen Sie bestätigen, dass sich die Controller-Datei im richtigen Verzeichnis für das Framework befindet. Zum Beispiel, wenn Sie das Laravel-Framework verwenden

See all articles