PHPリフレクショントライアル:コントローラーのアクションメソッドを抽出する
PHPリフレクショントライアル:コントローラーのアクションメソッドを抽出する
<?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 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









SpringBoot の初心者がプロジェクトを作成するとき、一連の問題 1.2.3.4.5.6 についてコントローラーをスキャンできません。別の方法は、開始時に @ComponentScan(basePackages={"xxx.xxx.xx","xxx.xxx") を追加することです。サービス クラス) .xx”}) はパッケージの完全修飾名であり、複数の SpringBoot カスタム コントローラーに使用できます。スタートアップ クラスとカスタム コントローラー パッケージが同じディレクトリにありません。 application.java の公式推奨配置

Docker の起動に失敗した場合の解決策: 1. 実行ステータスを確認し、「echo 3 > /proc/sys/vm/drop_caches」コマンドを使用して占有メモリを解放します; 2. 「$netstat -nltp|grep .. .」を使用します。 「」コマンドでポートが占有されているかどうかを確認します。オンライン後に占有されていることが判明した場合は、空いているポートに変更して再起動してください。

DJIはまだ新しいアクションカメラを導入する計画を確認していません。その代わりに、GoPro は今年、9 月 4 日に 2 台の新しいアクション カメラを発表すると予告し、ライバルに先んじることになるようです。

場合によっては、サービス コントローラーのプレフィックスが一貫している場合があります。たとえば、すべての URL のプレフィックスは /context-path/api/v1 であり、一部の URL には統一されたプレフィックスを追加する必要があります。考えられる解決策は、サービスのコンテキスト パスを変更し、コンテキスト パスに api/v1 を追加することです。グローバル プレフィックスを変更すると、上記の問題を解決できますが、欠点もあります。URL に複数のプレフィックスがある場合、たとえば、 URL にはプレフィックスが必要です。api/v2 の場合は区別できません。サービス内の一部の静的リソースに api/v1 を追加したくない場合は、区別できません。以下では、カスタム アノテーションを使用して、特定の URL プレフィックスを均一に追加します。 1つ、

Automator を使用して Mac 上のフォルダーに新しいテキスト ファイルを作成する Automator は、スクリプトを作成して自動化できる強力なアプリケーションです。この場合、Finder のどこからでも実行できる Automator クイック アクションを作成して、現在のフォルダーの場所に新しいテキスト ファイルを作成します。そのため、少しのセットアップを行うだけで、いつでもどこでも新しいテキスト ファイルを作成する機能に簡単にアクセスできます。 Mac で Automator アプリを開き、新しい「クイック アクション」の作成を選択します。検索機能を使用して「AppleScript」を検索し、ダブルクリックするか、AppleScri を実行します。

ノード起動エラーの解決策: 1. ターミナルで直接「node xx.js」を実行します; 2. 起動スタートアップ項目「scripts」を追加します: {"test": "echo \"Error: no test specific\" && exit 1 " ,"start":"node service.js"}"; 3. 「npm start」を再実行します。

DJI が Osmo Action 4 (Amazon で現在 299 ドル) をリリースしてからほぼ 1 年が経過しました。それ以来、同社は新しい RS カメラ ジンバルを含む他の部門に注力してきました。それに加えて、Avata だけでなく、さまざまなドローンも導入しています。

PHP フレームワークを使用すると、「PHPFatalerror: Class'Controller'notfound」などのエラーが頻繁に発生します。この種のエラーは通常、フレームワーク内のファイルの名前付け、場所、または読み込みに関連しており、特にコントローラーを使用しようとした場合に発生します。この記事では、この問題を解決するための一般的な処理方法をいくつか紹介します。ファイルの場所を確認する まず、コントローラー ファイルがフレームワークの正しいディレクトリにあることを確認する必要があります。たとえば、Laravel フレームワークを使用している場合、
