• legend3---laravel中获取控制器名称和方法名称


    legend3---laravel中获取控制器名称和方法名称

    一、总结

    一句话总结:

    Route::current()->getActionName();会有完整的当前控制器名和方法名
    public static function getControllerAndFunction()
    {
      $action = Route::current()->getActionName();
      list($class, $method) = explode('@', $action);
      $class = substr(strrchr($class,'\'),1);
      return ['controller' => $class, 'method' => $method];
    }

    1、list($class, $method) = explode('@', $action);中的list($class, $method)的作用是什么?

    让list中的$class和$method分别对应explode出来的数组的两个元素

    2、strrchr($class,'\')的作用是什么?

    strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
    AppHttpControllersAdminMyController中查找返回的结果是:MyController

    3、substr函数的作用是什么?

    Return part of a string
    echo substr('abcdef', 1);     // bcdef

    二、laravel中获取控制器名称和方法名称

    1、示例

    2、控制器中调用代码:

    class MyController extends Controller
    {
        //修改密码的界面
        public function changePasswordForm(){
            dd(AppModelControllerAndFunction::getControllerAndFunction());
            return view('admin.my.change_pass');
        }

    3、获取控制器名称和方法名称的代码

     1 <?php
     2 
     3 namespace AppModel;
     4 
     5 use IlluminateDatabaseEloquentModel;
     6 
     7 class ControllerAndFunction extends Model
     8 {
     9     //
    10     /**
    11      * @return array
    12      * 获取控制器和方法名
    13      */
    14     public static function getControllerAndFunction()
    15     {
    16         $action = Route::current()->getActionName();
    17         list($class, $method) = explode('@', $action);
    18         $class = substr(strrchr($class,'\'),1);
    19         return ['controller' => $class, 'method' => $method];
    20     }
    21 
    22 
    23     /**
    24      * 将控制器和方法用点拼接
    25      * @return string
    26      */
    27     public static function jointControllerAndFunction(){
    28         $action = Route::current()->getActionName();
    29         list($class, $method) = explode('@', $action);
    30         $class = substr(strrchr($class,'\'),1);
    31         return $class.'.'.$method;
    32     }
    33 
    34 }
    $action = Route::current()->getActionName();的结果为:

    list($class, $method) = explode('@', $action);的结果为:

    这一步得到方法名changePasswordForm

     $class = substr(strrchr($class,'\'),1);的结果为:

     这一步得到控制器名MyController

    strrchr($class,'\')的结果为:

     所以还需要substr从1的位置开始截取才的到控制器名称myController

     4、相关补充

    strrchr() 函数(在php中)查找字符在指定字符串中从右面开始的第一次出现的位置,如果成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。与之相对应的是strchr()函数,它查找字符串中首次出现指定字符以及其后面的字符。

     
  • 相关阅读:
    第6章 键盘_6.5 插入符号(不是光标)
    第6章 键盘_6.3-6.4 字符消息、键盘消息和字符集
    第6章 键盘_6.1-6.2 键盘基础与击键消息
    第5章 绘图基础_5.6 矩形、区域和剪裁
    第4章 进程(1)
    第3章 内核对象(2)
    第3章 内核对象(1)
    第2章 字符和字符串处理(2)
    第2章 字符和字符串处理(1)
    第1章 错误处理
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/11525328.html
Copyright © 2020-2023  润新知