【问题标题】:Get last part of current URL in Laravel 5 using Blade使用 Blade 在 Laravel 5 中获取当前 URL 的最后一部分
【发布时间】:2023-12-12 23:36:01
【问题描述】:

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

例如:

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

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

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

【问题讨论】:

标签: laravel laravel-5 laravel-5.2 laravel-5.1 laravel-blade


【解决方案1】:

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

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

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

  2. 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)

              【讨论】:

                最近更新 更多