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() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
App\Http\Controllers\Admin\MyController中查找\返回的结果是:\MyController
3、substr函数的作用是什么?
Return part of a string
echo substr('abcdef', 1); // bcdef
二、laravel中获取控制器名称和方法名称
1、示例
2、控制器中调用代码:
class MyController extends Controller
{
//修改密码的界面
public function changePasswordForm(){
dd(\App\Model\ControllerAndFunction::getControllerAndFunction());
return view('admin.my.change_pass');
}
3、获取控制器名称和方法名称的代码
<?php namespace App\Model; use Illuminate\Database\Eloquent\Model; class ControllerAndFunction extends Model
{
//
/**
* @return array
* 获取控制器和方法名
*/
public static function getControllerAndFunction()
{
$action = \Route::current()->getActionName();
list($class, $method) = explode('@', $action);
$class = substr(strrchr($class,'\\'),1);
return ['controller' => $class, 'method' => $method];
} /**
* 将控制器和方法用点拼接
* @return string
*/
public static function jointControllerAndFunction(){
$action = \Route::current()->getActionName();
list($class, $method) = explode('@', $action);
$class = substr(strrchr($class,'\\'),1);
return $class.'.'.$method;
} }
$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()函数,它查找字符串中首次出现指定字符以及其后面的字符。