【问题标题】:Laravel: How to get the action names from a controller and their params as a string?Laravel:如何从控制器中获取动作名称及其参数作为字符串?
【发布时间】:2018-03-09 10:40:10
【问题描述】:

我正在寻找一个函数,其中我将 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',
   )
  )
);

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

【问题讨论】:

    标签: php laravel url-routing laravel-5.5


    【解决方案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);
       }
    }
    

    第二步:获取方法参数

    使用 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 方法。

    最好的问候。

    【讨论】:

    • 谢谢。根据您的回答,我得到了解决问题的方法。 :)
    猜你喜欢
    • 2013-08-17
    • 2010-11-17
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多