【发布时间】:2016-06-16 08:44:02
【问题描述】:
为什么 Route::currentRouteName() 在 laravel 5 中的控制器方法中不起作用,但是当我在类名起作用之前提供 '\' 时。我需要知道在这种情况下上课前添加反斜杠的原因。可能是一些糟糕的场景,我不知道。请指导
$name = \Route::currentRouteName();
【问题讨论】:
-
你应该阅读命名空间。
为什么 Route::currentRouteName() 在 laravel 5 中的控制器方法中不起作用,但是当我在类名起作用之前提供 '\' 时。我需要知道在这种情况下上课前添加反斜杠的原因。可能是一些糟糕的场景,我不知道。请指导
$name = \Route::currentRouteName();
【问题讨论】:
您需要了解 PHP 命名空间的工作原理。
Route 不在控制器命名空间内,因此您需要为 Route 类提供完整的命名空间才能加载它。 Route 在根命名空间中,因此您可以使用 \Route 引用它,就像在目录结构中一样。
假设您的控制器如下所示:
<?php namespace App\Http\Controller
class HomeController extends Controller{
public function index(){
//Doing this will throw a Not Found exception because route is
//not inside `App\Http\Controller` namespace
$name = Route::currentRouteName();
//However if you specify the correct namespace it works like so:
$name = \Route::currentRouteName();
}
}
您可以在此处阅读有关命名空间的更多信息:
【讨论】:
你可以使用
\Request::route()->getName()
或
\Route::getCurrentRoute()->getPath();
【讨论】: