使用 Blade 在 Laravel 5 中获取当前 URL 的最后一部分

Posted

技术标签:

【中文标题】使用 Blade 在 Laravel 5 中获取当前 URL 的最后一部分【英文标题】:Get last part of current URL in Laravel 5 using Blade 【发布时间】:2016-10-20 19:18:02 【问题描述】:

如何动态获取不带/ 符号的当前URL 的最后一部分?

例如:

www.news.com/foo/bar 中获取bar

www.news.com/foo/bar/fun 中获取fun

在当前视图中将函数放在哪里或如何实现?

【问题讨论】:

laravel.com/api/5.2/Illuminate/Contracts/Routing/… 并执行正则表达式以获取零件 谢谢,能举个例子吗? 如果你用你想出的东西发布示例代码,我会帮助你。 【参考方案1】:

我也有同样的问题。在此期间 Laravel 8。我总结了我所知道的所有可能性。

你可以在你的网络路由中测试它:

    http(s)://127.0.0.1:8000/bar/foo ||呵呵

    http(s)://127.0.0.1:8000/bar/bar1/foo ||呵呵

Route::get('/foo/lastPart', function(\Illuminate\Http\Request $request, $lastPart) 
    dd(
        [
            'q' => request()->segment(count(request()->segments())),
            'b' => collect(request()->segments())->last(),
            'c' => basename(request()->path()),
            'd' => substr( strrchr(request()->path(), '/'), 1),
            'e' => $lastPart,
        ]
    )->where('lastPart', 'foo,baz'); // the condition is only to limit

我更喜欢变体 e)。

正如@Qevo 已经在他的回答中写的那样。您只需制作请求的最后一部分。要缩小范围,您可以将 WHERE 条件放在路线上。

【讨论】:

【参考方案2】:

你的控制器:

 use Illuminate\Support\Facades\URL;

file.blade.php:

echo basename(URL::current());

【讨论】:

【参考方案3】:

你可以使用 Laravel 的辅助函数 last。像这样:

last(request()->segments())

【讨论】:

【参考方案4】:

basename()Request::path() 一起使用。

basename(request()->path())

您应该可以在代码中的任何位置调用它,因为 request() 是 Laravel 中的全局辅助函数,而 basename() 是标准 PHP 函数,它也可以全局使用。

【讨论】:

【参考方案5】:

我就是这样做的:

 collect(request()->segments())->last() 

【讨论】:

【参考方案6】:

这对我很有用:

request()->path()

来自 www.test.site/news

获取 -> 新闻

【讨论】:

迄今为止最简单的解决方案 这有时会返回链接的额外部分:example/blabla 而不是 blabla【参考方案7】:

当然总是有 Laravel 的方式:

request()->segment(count(request()->segments()))

【讨论】:

我的第一个想法完全正确,一行代码;-) 简单易懂 这是最好的答案【参考方案8】:

Route object 是您想要的信息的来源。有几种方法可以获得信息,其中大多数涉及将某些内容传递给您的视图。我强烈建议不要在刀片中执行该工作,因为这是控制器操作的用途。

将值传递给刀片

最简单的方法是将路由的最后一部分作为参数并将该值传递给视图。

// app/Http/routes.php
Route::get('/test/uri_tail', function ($uri_tail) 
    return view('example')->with('uri_tail', $uri_tail);
);

// resources/views/example.blade.php
The last part of the route URI is <b> $uri_tail </b>.

避免路由参数需要更多的工作。

// app/Http/routes.php
Route::get('/test/uri-tail', function (Illuminate\Http\Request $request) 
    $route = $request->route();
    $uri_path = $route->getPath();
    $uri_parts = explode('/', $uri_path);
    $uri_tail = end($uri_parts);

    return view('example2')->with('uri_tail', $uri_tail);
);

// resources/views/example2.blade.php
The last part of the route URI is <b> $uri_tail </b>.

使用 request helper 在刀片中完成所有操作

// app/Http/routes.php
Route::get('/test/uri-tail', function () 
    return view('example3');
);

// resources/views/example3.blade.php
The last part of the route URI is <b> array_slice(explode('/', request()->route()->getPath()), -1, 1) </b>.

【讨论】:

【参考方案9】:

尝试:

 array_pop(explode('/',$_SERVER['REQUEST_URI'])) 

应该很好用。

【讨论】:

如果需要,还可以添加一个 rtrim 以删除最后一个斜杠。【参考方案10】:

试试request()-&gt;segment($number),它应该会给你一段网址。

在您的示例中,根据 URL 的段数,它可能应该是 request()-&gt;segment(2)request()-&gt;segment(3)

【讨论】:

以上是关于使用 Blade 在 Laravel 5 中获取当前 URL 的最后一部分的主要内容,如果未能解决你的问题,请参考以下文章

打印 laravel Blade 的内容(使用 Laravel 5.2)

Laravel系列5.1Blade模板开发

在 Laravel 5.1 中使用 Blade 访问嵌套 URL

Laravel 5 - 所有模板中都可用的全局 Blade 视图变量

当使用 Livewire 在 Laravel Blade 中运行验证时,如何隐藏某些内容?

使用 Blade 模板的 Laravel 5 表单中预选选项的条件 @if 语句