代码之家  ›  专栏  ›  技术社区  ›  Ronald Zwiers

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

  •  30
  • Ronald Zwiers  · 技术社区  · 8 年前

    如何在不使用 / 动态签名?

    例如:

    在里面 www.news.com/foo/bar 收到 bar .

    在里面 www.news.com/foo/bar/fun 收到 fun .

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

    10 回复  |  直到 5 年前
        1
  •  66
  •   user2094178    8 年前

    当然,总是有拉拉维夫的方式:

    request()->segment(count(request()->segments()))
    
        2
  •  38
  •   Majid Alaeinia georak    5 年前

    你可以使用Laravel的助手函数 last 如此:

    last(request()->segments())

        3
  •  24
  •   JRoss    7 年前

    我就是这样做的:

    {{ collect(request()->segments())->last() }}
    
        4
  •  16
  •   Erik Berkun-Drevnig    7 年前

    使用 basename() 随着 Request::path() .

    basename(request()->path())
    

    您应该能够从代码中的任何位置调用它,因为 request() 是Laravel中的全局辅助函数 基本名称() 是一个标准的PHP函数,也可以在全球范围内使用。

        5
  •  9
  •   Qevo    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>.
    
        6
  •  5
  •   Davor Minchorov    8 年前

    尝试 request()->segment($number) 它应该给你一段URL。

    在您的示例中,它可能是 request()->segment(2) request()->segment(3) 基于URL的段数。

        7
  •  1
  •   Paul Basenko    7 年前

    这对我很有用:

    request()->path()
    

    来自www.test.site/news

    获取->消息

        8
  •  1
  •   Hashir    3 年前

    您的联系人:

     use Illuminate\Support\Facades\URL;
    

    文件.blade.php:

    echo basename(URL::current());

        9
  •  0
  •   Maik Lowrey AlwaysLearning    3 年前

    我也有同样的问题。与此同时,拉拉维勒8。我总结了我所知道的所有可能性。

    您可以在您的网络路径中进行测试:

    1. 网址://127.0.0.1:8000/bar/foo||baz

    2. 网址://127.0.0.1:8000/bar/bar1/foo||baz

    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条件。

        10
  •  -1
  •   Claudio King    8 年前

    试用:

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

    它应该工作得很好。