在Laravel 5中获取URL片段

6

在Laravel中访问之前的URL。我在我的控制器中使用以下代码。

$current_url = Request::url();
$back_url = redirect()->back()->getTargetUrl();
if ($current_url != $back_url) {
  Session::put('previous_url', redirect()->back()->getTargetUrl());
}

这个方法可以在服务端验证失败时仍然保留之前的url。 在我的blade视图中,我可以像这样访问之前的url:{{ Session::get('previous_url') }}

我需要找到之前url的第二部分。 谢谢。


第二个段是什么意思?你能举个例子吗? - thefallen
www.example.com/segment1/segment2/12/114/122 - 如果存在,我需要以 Laravel 的方式获取这个 segment 2。 - Shakun Chaudhary
2个回答

4
你可以这样做:
request()->segment(2);

request() 是一个帮助函数,返回的是 Illuminate\Http\Request 对象,你也可以使用门面 Request 或者在方法中注入该类作为依赖。

编辑

使用 redirect back 可以获取当前请求的 URL: redirect()->back()->getRequest()->segment(2);


redirect()->back()->getTargetUrl() 返回带有参数的返回URL。需要提取第二个片段。 - Shakun Chaudhary
@ShakunChaudhary 抱歉,我误解了您想要从先前的URL中获取的部分。请检查我的编辑。 - thefallen
1
我需要从目标URL中获取片段。如果我使用 redirect()->back()->getRequest()->segment(2),它会返回当前URL的片段而不是之前的URL。 - Shakun Chaudhary
1
@ShakunChaudhary 噢,是的,但是 redirect()->back() 返回的是 RedirectResponse 对象,无法访问片段。因此在这种情况下,请使用 getTargetUrl() 并像 @Chris 建议的那样解析它。 - thefallen
我也有同感。但在克里斯的方法中,return Arr::是什么意思?也许他只是复制粘贴了。所以现在我必须用 PHP 的方式来做。谢谢 @TheFallen - Shakun Chaudhary
@ShakunChaudhary 这是 Illuminate\Support\Arrget() 是从数组中获取一个项目。 - thefallen

2

在幕后,Laravel 通过 Request 类执行以下两个操作来获取 URL 的段:

public function segment($index, $default = null)
{
    return Arr::get($this->segments(), $index - 1, $default);
}

public function segments()
{
    $segments = explode('/', $this->path());

    return array_values(array_filter($segments, function ($v) {
        return $v != '';
    }));
}

你可以在一个辅助函数中实现类似的功能:

public function segment($url, $index, $default)
{
    return Arr::get($this->segments($url), $index - 1, $default);
}


public function segments($url)
{
    $segments = explode('/', $url);

    return array_values(array_filter($segments, function ($v) {
        return $v != '';
    }));
}

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