在 Laravel v4 中,我能够使用...获取当前路线名称
Route::currentRouteName()
如何在Laravel v5和Laravel v6中做到这一点?
在 Laravel v4 中,我能够使用...获取当前路线名称
Route::currentRouteName()
如何在Laravel v5和Laravel v6中做到这一点?
尝试这个
Route::getCurrentRoute()->getPath();
或者
\Request::route()->getName()
从 v5.1
use Illuminate\Support\Facades\Route;
$currentPath= Route::getFacadeRoot()->current()->uri();
Laravel v5.2
Route::currentRouteName(); //use Illuminate\Support\Facades\Route;
或者,如果您需要操作名称
Route::getCurrentRoute()->getActionName();
检索请求 URI
path 方法返回请求的 URI。因此,如果传入请求的目标是http://example.com/foo/bar
,则 path 方法将返回foo/bar
:
$uri = $request->path();
该is
方法允许您验证传入请求 URI 是否与给定模式匹配。使用此方法时,您可以使用该*
字符作为通配符:
if ($request->is('admin/*')) {
//
}
要获取完整的 URL,而不仅仅是路径信息,您可以在请求实例上使用 url 方法:
$url = $request->url();
Laravel v5.3 ... v5.8
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
Laravel v6.x...7.x
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
** 当前截至 2019 年 11 月 11 日 - 版本 6.5 **
可以选择使用请求获取路线
$request->route()->getName();
使用 Laravel 5.1,您可以使用
\Request::route()->getName()
找到一种方法来查找适用于 laravel v5、v5.1.28和v5.2.10的当前路由名称
命名空间
use Illuminate\Support\Facades\Route;
和
$currentPath= Route::getFacadeRoot()->current()->uri();
对于 Laravel laravel v5.3,您可以使用:
use Illuminate\Support\Facades\Route;
Route::currentRouteName();
如果您想在多条路线上选择菜单,您可以这样做:
<li class="{{ (Request::is('products/*') || Request::is('products') || Request::is('product/*') ? 'active' : '') }}"><a href="{{url('products')}}"><i class="fa fa-code-fork"></i> Products</a></li>
或者,如果您只想选择单个菜单,您可以这样做:
<li class="{{ (Request::is('/users') ? 'active' : '') }}"><a href="{{url('/')}}"><i class="fa fa-envelope"></i> Users</a></li>
也在Laravel 5.2中测试过
希望这对某人有所帮助。
如果您需要url,而不是route name,则不需要使用/需要任何其他类:
url()->current();
Laravel 5.2 你可以使用
$request->route()->getName()
它会给你当前的路线名称。
在 5.2 中,您可以直接使用请求:
$request->route()->getName();
或通过辅助方法:
request()->route()->getName();
输出示例:
"home.index"
访问当前路由
在 Blade 模板中获取当前路由名称
{{ Route::currentRouteName() }}
有关更多信息https://laravel.com/docs/5.5/routing#accessing-the-current-route
最短的方法是路线门面
\Route::current()->getName()
这也适用于 laravel 5.4.*
在控制器操作中,您可以这样做:
public function someAction(Request $request)
{
$routeName = $request->route()->getName();
}
$request
这里由 Laravel 的服务容器解决。
getName()
仅返回命名路由的路由名称,null
否则(但您仍然可以探索该\Illuminate\Routing\Route
对象以获取其他感兴趣的内容)。
换句话说,您应该像这样定义您的路线以返回“nameOfMyRoute”:
Route::get('my/some-action', [
'as' => 'nameOfMyRoute',
'uses' => 'MyController@someAction'
]);
您可以在模板中使用:
<?php $path = Route::getCurrentRoute()->getPath(); ?>
<?php if (starts_with($path, 'admin/')) echo "active"; ?>
您可以使用以下代码在刀片文件中获取路线名称
request()->route()->uri
访问当前路由(v5.3 以上)
您可以使用 Route 门面的 current、currentRouteName 和 currentRouteAction 方法来访问有关处理传入请求的路由的信息:
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
请参阅 Route 外观的底层类和 Route 实例的 API 文档以查看所有可访问的方法。
参考:https ://laravel.com/docs/5.2/routing#accessing-the-current-route
现在在 Laravel 中5.3
,我看到您尝试过类似的方法:
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
https://laravel.com/docs/5.3/routing#accessing-the-current-route
$request->route()->getName();
在 laravel 7 或 8 中使用辅助函数
Get Current Route Name
request()->route()->getName()
要检查路由是否当前更好,请使用宏为请求类创建自己的方法
在方法AppServiceProvider
中:boot
use Illuminate\Http\Request;
public function boot()
{
Request::macro('isCurrentRoute', function ($routeNames) {
return in_array(
request()->route()->getName(),
is_array($routeNames) ? $routeNames : explode(",", $routeNames)
);
});
}
您可以在刀片或控制器中使用此方法
request()->isCurrentRoute('foo') // string route
request()->isCurrentRoute(['bar','foo']) //array routes
request()->isCurrentRoute('blogs,foo,bar') //string route seperated by comma
您可以使用内置的 laravel 路由方法
route()->is('home');
route()->is('blogs.*'); //using wildcard
Request::path();
更好,记住use Request;
您可能要做的第一件事是在class顶部导入命名空间。
use Illuminate\Support\Facades\Route;
拉拉维尔 v8
$route = Route::current(); // Illuminate\Routing\Route
$name = Route::currentRouteName(); // RouteName
$action = Route::currentRouteAction(); // Action
Laravel v7,6 和 5.8
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
您可以使用以下方法:
Route::getCurrentRoute()->getPath();
在 Laravel 版本 > 6.0 中,您可以使用以下方法:
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
在控制器中访问当前路由名称
即 - http://localhost/your_project_name/edit
$request->segment(1); // edit
( 或者 )
$request->url(); // http://localhost/your_project_name/edit
解决方案 :
$routeArray = app('request')->route()->getAction();
$controllerAction = class_basename($routeArray['controller']);
list($controller, $route) = explode('@', $controllerAction);
echo $route;
Looking at \Illuminate\Routing\Router.php
you can use the method currentRouteNamed()
by injecting a Router in your controller method. For example:
use Illuminate\Routing\Router;
public function index(Request $request, Router $router) {
return view($router->currentRouteNamed('foo') ? 'view1' : 'view2');
}
or using the Route facade:
public function index(Request $request) {
return view(\Route::currentRouteNamed('foo') ? 'view1' : 'view2');
}
You could also use the method is()
to check if the route is named any of the given parameters, but beware this method uses preg_match()
and I've experienced it to cause strange behaviour with dotted route names (like 'foo.bar.done'
). There is also the matter of performance around preg_match()
which is a big subject in the PHP community.
public function index(Request $request) {
return view(\Route::is('foo', 'bar') ? 'view1' : 'view2');
}
使用 laravel 助手和魔法方法
request()->route()->getName()
我已经用于在 larvel 5.3 中获取路线名称
Request::path()
由于某些原因,我无法使用这些解决方案中的任何一个。所以我只是在web.php
as$router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])
和我的控制器中声明了我的路由,我得到了路由的名称,使用$routeName = $request->route()[1]['as'];
它$request
是方法中的\Illuminate\Http\Request $request
类型提示参数index
UserController
使用流明 5.6。希望它会帮助某人。
在 Helper 文件中,
您可以使用Route::current()->uri()
获取当前 URL。
因此,如果您比较路线名称以在菜单上设置活动类,那么最好使用
Route::currentRouteName()
获取路线名称并进行比较
这是我使用的,我不知道为什么没有人提到它,因为它对我来说非常好用。
Route::getCurrentRoute()->uri ; // this returns a string like '/home'
所以我在我的master.blade.php
文件中使用它:
...
@if ( Route::getCurrentRoute()->uri =='/dashbord' )
@include('navbar')
@endif
...
如果在直接视图中需要路由名称或 url id 对于直接视图上的路由名称,没有人有答案
$routeName = Request::route()->getName();
查看来自 url 的 id
$url_id = Request::segment(2);
\Request::path()
我用它来获取当前的uri
您可以使用这行代码:url()->current()
在刀片文件中:{{url()->current()}}
有很多方法可以做到这一点。您可以键入:
\Illuminate\Support\Facades\Request::route()->getName()
获取路线名称。