如何在Laravel 4中的@if语句中获取当前URL?

345
我正在使用Laravel 4。我想在使用Laravel的Blade模板引擎时,在视图中的@if语句内访问当前URL,但我不知道如何做。
我知道可以使用类似于<?php echo URL::current(); ?>的方法来实现,但在@if Blade语句内部不可能这样做。
有什么建议吗?

以下任何答案是否有助于解决您的问题? - N69S
30个回答

427

您可以使用Request::url()获取当前URL,以下是示例:

@if(Request::url() === 'your url here')
    // code
@endif

Laravel提供了一种方法来判断URL是否匹配一个模式

if (Request::is('admin/*'))
{
    // code
}

查看相关文档以获取不同的请求信息:http://laravel.com/docs/requests#request-information


2
<li{{ (Request::is('admin/dashboard') ? ' class="active"' : '') }}> 我尝试了这个,但失败了 :x - TransformBinary
5
在我的情况下,我在URL中使用了起始的斜杠“/”,去掉它可以解决这个问题。 - Joaquín L. Robles
4
我使用以下格式:<li{!! (Request::url() == url('/')) ? ' class="active"' : '' !!}> 来实现它,因为采用 {{ some_code }} 的格式会使用字符串编码。 - Viktor
3
url()现在返回一个builder实例。必须使用url()->current() - Jeff Puckett
1
虽然我很久以前就点赞了这个问题,但今天在 Laravel 5.7 上遇到了麻烦,最终我使用了这个代码来解决:@if (Request::path() != 'login')。请注意,在“login”之前没有斜杠。 - Ryan
显示剩余4条评论

114

您还可以使用Route::current()->getName()来检查您的路由名称。

示例:routes.php

Route::get('test', ['as'=>'testing', function() {
    return View::make('test');
}]);

查看:

@if(Route::current()->getName() == 'testing')
    Hello This is testing
@endif

51
FYI,“Route::is('testing')”与“Route::current()->getName() == 'testing'”是相同的。 - Hkan
@Hkan 不是一样的, Route::is('testing') ->> 测试它不会工作 Route::is('test') ->> 测试它会工作 Route::current()->getName() == 'testing' 别名和URL是不同的。 - Naveen Singh raghuvanshi
1
@Naveen 不对,Route::is() 是检查路由名称,而不是路径。 - Hkan
1
同时也可以使用简写的 Route::currentRouteName() - Jeff Puckett
@Hkan,但是当你在URL中使用参数时,例如令牌,那就行不通了... - Pathros
@Pathros,你可以使用通配符,例如Route::is('foo.*)或者Route::is('foo*') - Hkan

77

或许你应该尝试一下这个:

<li class="{{ Request::is('admin/dashboard') ? 'active' : '' }}">Dashboard</li>

70

要在 blade 视图中获取 当前URL,可以使用以下方法:

<a href="{{url()->current()}}">Current Url</a>

因此,您可以使用以下代码进行比较:

@if (url()->current() == 'you url')
    //stuff you want to perform
@endif

4
如果您需要在Blade中获取查询字符串,可以使用request()->getQueryString()。这个函数和 url()->current() 结合使用非常有帮助,因为前者可以获取查询字符串,而后者则可以省略查询字符串。 - Spencer O'Reilly
@if(url()->current() == '/admin/search-result' 我使用了这段代码,但它没有起作用? - Mahdi Safari
在这种情况下,只需编写 @if(Request::is('admin/search-result')) - Sagar Naliyapara
这个工作得非常好。谢谢。 - Ken

54

我会这样做:

@if (Request::path() == '/view')
    // code
@endif

'/view' 是 routes.php 中的视图名称。


如何判断当前目录是否为主目录?我的意思是,public/。啊,我明白了,我只需要输入=='public'即可。 - Pathros
1
如果在route.php中主目录是'/',那么你只需要写== '/') - Jucaman
你如何使它与参数一起工作?不仅仅是路由名称。 - Pathros
你可以根据路由配置的方式,在路由名称后以多种方式连接参数。 - Jucaman
我是这样做的:Request::url() - 然后你就可以得到完整的URL。 - Derk Jan Speelman

27

以下是帮助我在 Laravel 5.2 中使用 Bootstrap 激活导航类的内容:

<li class="{{ Request::path() == '/' ? 'active' : '' }}"><a href="/">Home</a></li>
<li class="{{ Request::path() == 'about' ? 'active' : '' }}"><a href="/about">About</a></li>

1
谢谢,我知道代码,但谷歌让我在5秒内找到了这里,哈哈。 - user4051844
同样的方法也适用于 Laravel 4.2,并且效果良好。谢谢。 - Vipertecpro
同时也在使用 Laravel 5.6,谢谢...这让我免去了为每个视图创建导航的麻烦 :D - NaturalDevCR

20

有点老了,但这在L5中仍然有效:

<li class="{{ Request::is('mycategory/', '*') ? 'active' : ''}}">

这个可以捕获 /mycategory 和 /mycategory/slug 两个路径。


1
我正在使用 {{ Request::is('clientes/*') ? 'active' : ''}} - Alex Angelico

18

Laravel 5.4

全局函数

@if (request()->is('/'))
    <p>Is homepage</p>
@endif

如果你正在处理像这样的查询字符串,那么这种方法并不总是有效:domain.com/?page_id=1、domain.com/?page_id=2,因为这些URL也等同于“/”。 - Ryan S
我使用了 request()->routeIs('...') - Lachezar Todorov

17

您可以使用此代码获取当前URL:

echo url()->current();

echo url()->full();

我从Laravel文档中获得了这个。


17
你可以使用下面的代码来获取url
例如,你的URL可能是像这样的:https//www.example.com/testurl?test
echo url()->current();
Result : https//www.example.com/testurl

echo url()->full();
Result: https//www.example.com/testurl?test

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接