在Laravel 5.1中获取完整的URL

31
我有多个 Bootstrap 标签页,每个标签页执行的操作都不同。例如:

app-url/users#creat-admin-users-tab app-url/users#creat-regular-users-tab

是否有在 Laravel 中获取包括 #tab-name 的完整 URL 的方法?

感谢您的时间。


我需要的是URL,而不是我的服务器信息。 - Muhammad Atallah
现在你想把它放在哪里?比如说你想在Blade中使用它还是在jQuery或其他地方使用? - Bharat Geleda
3个回答

82

Laravel有功能可以返回当前的URL地址,具体内容在这个页面上: http://laravel.com/api/5.0/Illuminate/Http/Request.html

你需要的是Request::fullUrl()方法。

假设我现在在 http://laravel.dev/test?test=1,以下是方法和结果:

Request::fullUrl()
// Returns: http://laravel.dev/test?test=1
Request::url()
// Returns: http://laravel.dev/test
Request::path()
// Returns: test
Request::root()
// Returns: http://laravel.dev 

1
我之前使用过它,它返回了所有的URL,但没有包括#tab-name - Muhammad Atallah
2
服务器不知道在 # 之后的内容,那只是为了用户而设定的。你必须自己添加它。 - Andrius
1
所有选项卡都包含在一个路由中,使用Route::match。因此,我想检查当前选项卡以执行适当的操作。我认为在这种情况下最好的方法是$request->isMethod(''),但如果有多个POST或PUT方法,我不知道该怎么办。 - Muhammad Atallah
2
你无法在后端检查 # 值。你可以使用 javascript 来实现什么。 - Andrius
@JustUser 如果你在每个选项卡上有单独的<form>,你可以将一种标签标识符放入此表单的隐藏字段中。如果它是一个大型表单,分布在所有选项卡上,你仍然可以使用隐藏字段,但你需要使用JavaScript更新其值(当前选项卡ID)。 - pilat
显示剩余2条评论

5

没错 - 目前获得“#”的唯一方法是使用 JavaScript,例如:

var hash = window.location.hash;
var tabName1 = '#creat-admin-users-tab';
var tabName2 = '#creat-regular-users-tab';
if (hash.indexOf(tabName1) !== -1) console.log("It's creat-admin-users-tab");
else if (hash.indexOf(tabName2) !== -1) console.log("It's creat-regular-users-tab");

这也可以帮助你处理URL的其他部分(在路由文件中添加它):

use Illuminate\Http\Request;

Route::get('/app-url/users', function (Request $request) {
    $fullUrl = $request->fullUrl();
    var_dump($fullUrl);
});

5
请查看以下内容:

$_SERVER['HTTP_HOST'] => 当前请求的主机名。

$_SERVER['HTTP'] => 如果协议为HTTP,则设置为非空值。

$_SERVER['HTTPS'] => 如果协议为HTTPS,则设置为非空值。

$_SERVER["SERVER_PORT"] => 服务器端口。默认值为:80。

$_SERVER['REQUEST_URI'] => 访问此页面的URI;


警告:这是一个坏主意。任何以“HTTP_”开头的内容都是由客户端发送的,请不要依赖它。 - AbiusX

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