Laravel获取当前路由

4

我有一些导航链接,想要在Laravel 5中获取当前路由,这样我就可以在我的导航中使用class active。以下是示例链接:

<li class="active"> <a href="/">Home</a> </li>
<li> <a href="/contact">Contact</a> </li>
<li> <a href="/about">About</a> </li>

正如您所看到的,在“主页”链接中有“active class”,这意味着它是当前选定的路由。但由于我正在使用“laravel blade”,所以我不会在每个blade文件中重复导航链接,因此我不能使用active类,因为我只有在我的“template.blade.php”中有导航链接。我如何获取当前路由并检查它是否等于当前链接?谢谢。

你考虑过使用 JavaScript 来改变 DOM 吗? - mdamia
@mdamia,我已经解决了并发布了我的答案。 - wobsoriano
4个回答

5

$uri = Request::path()

是用于获取当前请求的URI路径。想要了解更多信息,请参考文档


3
你可以使用命名路由,例如:
Route::get('/', ['as'=>'home', 'uses'=>'PagesController@index']);

然后在视图中,您可以执行以下操作:

 <li {!! (Route::is('home') ? 'class="active"' : '') !!}>
         {!! link_to_route('home', 'Home') !!}
        </li>

0

简单的方法总是更好,只需使用您用于生成链接的相同函数即可提供所有内容,包括使用通配符的灵活性。

<a class="nav-link {{ Request::url() === route("products.list", [$group_key]) ? 'active' : '' }}" 
    href="{{ route("products.list", [$group_key]) }}"
    >
    LInk text
</a>

此外,您仍然只需要一个地方来管理URL - 您的路由器文件。

0

我用了一些小技巧,终于让它工作了。例如,地址栏中的URL是http://localhost:8000/tourism/places

如果我使用Request::path()方法,我会得到tourism/places。但我想要的只是tourism部分,所以我做了这个:

$currentPath = Request::path();

$values = explode("/", $currentPath);

$final = $values[0];

现在,$final变量将具有值"tourism"

现在,为了使该变量在全局范围内加载,我将代码包含在AppServiceProvider.php中的public function boot()中。

public function boot()
{
    $currentPath = Request::path();

    $values = explode("/", $currentPath);

    $final = $values[0];

    view()->share('final', $final);
}

最后,在我的 Blade 模板中,
<li @if ($final== "tourism") class="active" @endif>
<a href="/tourism/places">Places</a>
</li>

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