Laravel:如何从控制器及其参数作为字符串获取动作名称?

时间:2018-03-09 10:40:10

标签: php laravel url-routing laravel-5.5

我正在寻找一个函数,我将ControllerName作为参数给出,并返回该控制器中的函数。例如:

.
.
.
class ExampleController extends Controller {

  public static function firstExample($param1 = ' ', $param2 = 0){
   .
   .
   .
  }

  public static function secondExample($param3){
   .
   .
   .
  }
}

如果我致电:$actions = MyController::getActions('ExampleController');

它输出这个结构:

array(
  0 => array(
   'name' => 'firstExample'
   'params' => array(
     0 => '$param1',
     1 => '$param2',
   )
 ),
 1 => array(
   'name' => 'secondExample'
   'params' => array(
     0 => '$param3',
   )
  )
);

我知道如何编写函数和控制器。我的问题是:如何从不同的控制器获取函数名称及其参数(如果可能的话,也可能是它们的类型)?

1 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,您希望获得任何控制器的方法及其各自的参数。

第1步:获取方法名称

使用PHP get_class_methods,您可以检索特定类的所有方法。

function getActions($controllerName){
   $class_methods = get_class_methods(controllerName); //getting them
   foreach ($class_methods as $method_name) {          //looping them
      getParams($controllerName,$method_name);
   }
}

第2步:获取方法参数

使用PHP的ReflectionMethod类:

function getParams($controllerName,$method_name){
   $method = new ReflectionMethod($className, $methodName);
   $params = $method->getParameters();
   foreach ($params as $param) {
     echo $param->getName(); //add to array here
   }
}

现在获取类型,不确定$param->getType()是否有效,但这只是一个尝试的问题,无论如何这只是基本的东西,现在你可以操作这个功能以满足你的需求。

注意:不确定Laravel是否有更好的方式,这是一种普通的PHP方式。

最诚挚的问候。