使用 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()->segment($number)
,它应该会给你一段网址。
在您的示例中,根据 URL 的段数,它可能应该是 request()->segment(2)
或 request()->segment(3)
。
【讨论】:
以上是关于使用 Blade 在 Laravel 5 中获取当前 URL 的最后一部分的主要内容,如果未能解决你的问题,请参考以下文章
打印 laravel Blade 的内容(使用 Laravel 5.2)
在 Laravel 5.1 中使用 Blade 访问嵌套 URL
Laravel 5 - 所有模板中都可用的全局 Blade 视图变量