1. アドレスバーパラメーターを通じてモジュール名とコントローラー名を取得する方法 (ルーティングがあり、書き換えモジュールがオンになっている場合でも)
2. tp はプレメソッドおよびポストメソッドの関数モジュールをどのように実装し、パラメーターを使用してメソッドを実行するのか?
PHP システムに付属する ReflectionClass クラスと ReflectionMethod クラスは、ユーザー定義クラスの属性、メソッドのアクセス許可、パラメーターなどの情報を反映できます。この情報を通じて、メソッドの実行を正確に制御できます
ReflectionClass で使用される主なメソッド:
hasMethod(string) メソッドの有無
getMethod(string) メソッドの取得
ReflectionMethod メインメソッド:
getNumberOfParameters() パラメータ数を取得
getParamters() パラメータ情報を取得
3. コードのデモ
//インデックスメソッドを実行
$method = new ReflectionMethod('IndexAction','index');
//権限判定を行う
if($method->isPublic()){
$class = new ReflectionClass(' IndexAction ');
//プレメソッドを実行します
if($class->hasMethod('_before_index')){
$beforeMethod = $class->getMethod('_before_index');
if($beforeMethod- > isPublic()){
$beforeMethod->invoke(new IndexAction);
}
}
$method->invoke(new IndexAction);
//postメソッドを実行します
if($class->hasMethod('_after_index')){
$beforeMethod = $class->getMethod('_after_index');
if($beforeMethod->isPublic() ){
$beforeMethod->invoke(new IndexAction);
}
}
}
//パラメータを指定してメソッドを実行する
$method = new ReflectionMethod('IndexAction','test');
$params = $method->getParameters();
foreach($params as $param ){
$ paramName = $param->getName();
if(isset($_REQUEST[$paramName]))
$args[] = $_REQUEST[$paramName];
elseif($param->isDefaultValueAvailable())
$args[] = $param->getDefaultValue();
}
if(count($args)==$method->getNumberOfParameters())
$method->invokeArgs(new IndexAction,$args);
else
echo 'パラメータが一致しません!';