Rumah pembangunan bahagian belakang tutorial php 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 '';
	}
	
}
Salin selepas log masuk
?

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
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan masalah yang SpringBoot tidak dapat mengimbas Pengawal Bagaimana untuk menyelesaikan masalah yang SpringBoot tidak dapat mengimbas Pengawal May 14, 2023 am 08:10 AM

Apabila pemula SpringBoot mencipta projek, Pengawal tidak boleh diimbas dan satu siri masalah ialah 1.2.3.4.5.6 Cara lain ialah menambah @ComponentScan(basePackages={"xxx.xxx.xx","xxx.xxx" apabila. memulakan kelas perkhidmatan) .xx”}) ialah nama pakej yang layak sepenuhnya, yang boleh digunakan untuk berbilang pengawal tersuai SpringBoot Laluan pengawal tersuai SpringBoot tidak boleh diimbas dan tidak ditemui kerana kelas permulaan dan pakej Pengawal tersuai tidak berada dalam direktori yang sama. Peletakan application.java yang disyorkan secara rasmi

Apakah yang perlu saya lakukan jika docker start tidak boleh bermula? Apakah yang perlu saya lakukan jika docker start tidak boleh bermula? Oct 21, 2022 pm 03:43 PM

Penyelesaian kepada kegagalan permulaan docker: 1. Semak status berjalan, dan kemudian lepaskan memori yang diduduki melalui arahan "echo 3 &gt; /proc/sys/vm/drop_caches" 2. Gunakan "$netstat -nltp|grep .. . " perintah untuk menyemak sama ada port telah diduduki. Jika ia didapati telah diduduki selepas pergi dalam talian, tukarkannya kepada port yang tersedia dan kemudian mulakan semula.

DJI Osmo Action 5 Pro: Tarikh keluaran diperkatakan apabila peruncit mendedahkan harga pelancaran yang boleh mengurangkan GoPro Hero 13 Black DJI Osmo Action 5 Pro: Tarikh keluaran diperkatakan apabila peruncit mendedahkan harga pelancaran yang boleh mengurangkan GoPro Hero 13 Black Sep 04, 2024 am 06:51 AM

DJI belum mengesahkan sebarang rancangan untuk memperkenalkan kamera aksi baharu lagi. Sebaliknya, nampaknya GoPro akan mendahului pesaingnya tahun ini, setelah mengusik bahawa ia akan memperkenalkan dua kamera aksi baharu pada 4 September. Untuk konteks, ini dijangka

Cara menambah awalan URL pada berbilang pengawal SpringBoot Cara menambah awalan URL pada berbilang pengawal SpringBoot May 12, 2023 pm 06:37 PM

Prakata Dalam sesetengah kes, awalan dalam pengawal perkhidmatan adalah konsisten Contohnya, awalan semua URL ialah /context-path/api/v1, dan awalan bersatu perlu ditambahkan pada beberapa URL. Penyelesaian yang boleh difikirkan adalah untuk mengubah suai laluan konteks perkhidmatan dan menambah api/v1 pada laluan konteks global boleh menyelesaikan masalah di atas, tetapi terdapat kelemahan Jika URL mempunyai beberapa awalan URL memerlukan awalan Jika ia adalah api/v2, ia tidak dapat dibezakan Jika anda tidak mahu menambah api/v1 pada beberapa sumber statik dalam perkhidmatan, ia juga tidak dapat dibezakan. Yang berikut menggunakan anotasi tersuai untuk menambahkan awalan URL tertentu secara seragam. satu,

Cara membuat fail teks dalam folder pada Mac Cara membuat fail teks dalam folder pada Mac Apr 15, 2023 pm 01:52 PM

Cipta fail teks baharu dalam folder pada Mac menggunakan Automator Automator ialah aplikasi berkuasa yang membolehkan anda menulis skrip dan mengautomasikan. Dalam kes ini, kami akan mencipta tindakan pantas Automator yang boleh dijalankan dari mana-mana sahaja dalam Finder untuk mencipta fail teks baharu dalam lokasi folder semasa. Jadi dengan sedikit persediaan, anda boleh mengakses dengan mudah keupayaan untuk mencipta fail teks baharu pada bila-bila masa, di mana-mana sahaja. Buka apl Automator pada Mac anda dan pilih Cipta "Tindakan Pantas" baharu Gunakan fungsi carian dan cari "AppleScript" kemudian klik dua kali atau akan jalankan AppleScri

Perkara yang perlu dilakukan jika permulaan nod melaporkan ralat Perkara yang perlu dilakukan jika permulaan nod melaporkan ralat Dec 29, 2022 pm 01:55 PM

Penyelesaian kepada ralat permulaan nod: 1. Jalankan "nod xx.js" terus dalam terminal 2. Tambah item permulaan "skrip": {"test": "echo \"Error: no test specified\" && exit 1 "; ,"start":"node service.js"}"; 3. Laksanakan semula "npm start".

Kamera aksi DJI Osmo baharu dikesan sebelum kemungkinan pelancaran musim panas 2024 untuk menyaingi keluaran GoPro dan Insta360 baru-baru ini Kamera aksi DJI Osmo baharu dikesan sebelum kemungkinan pelancaran musim panas 2024 untuk menyaingi keluaran GoPro dan Insta360 baru-baru ini Jul 01, 2024 am 09:49 AM

Hampir setahun telah berlalu sejak DJI mengeluarkan Osmo Action 4 (kurr. $299 di Amazon). Sejak itu, syarikat itu telah memberi tumpuan kepada bahagian lainnya, termasuk gimbal kamera RS baharu. Selain itu, ia juga telah memperkenalkan pelbagai dron seperti Avata

Penyelesaian kepada ralat Fatal PHP: Kelas 'Pengawal' tidak ditemui Penyelesaian kepada ralat Fatal PHP: Kelas 'Pengawal' tidak ditemui Jun 22, 2023 pm 03:13 PM

Apabila menggunakan rangka kerja PHP, anda sering menghadapi ralat seperti "PHPFatalerror: Class'Controller'notfound". Ralat jenis ini biasanya berkaitan dengan penamaan, lokasi atau pemuatan fail dalam rangka kerja, terutamanya apabila anda cuba menggunakan pengawal. Artikel ini akan memperkenalkan beberapa kaedah pemprosesan biasa untuk menyelesaikan masalah ini. Sahkan lokasi fail Mula-mula, anda perlu mengesahkan bahawa fail pengawal terletak dalam direktori yang betul untuk rangka kerja. Contohnya, jika anda menggunakan rangka kerja Laravel

See all articles