如何获取Laravel中URL参数的值?
How to get values of URL parameters in Laravel?
我在从 Fitbit 的重定向 URL 中获取 URL 参数时遇到困难 我在这里尝试在不使用社交名流或任何其他软件包的情况下集成 Fitbit。
我有以下 URL:
http://localhost/abc/public/portal/fitbit/fitbitIntegration#access_token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1WjVLUzUiLCJhdWQiOiIyMjhMNjUiLCJpc3MiOiJGaXRiaXQiLCJ0eXAiOiJhY2Nlc3NfdG9rZW4iLCJzY29wZXMiOiJ3aHIgd251dCB3cHJvIHdzbGUgd3dlaSB3c29jIHdzZXQgd2FjdCB3bG9jIiwiZXhwIjoxNTA1NDU5MTM2LCJpYXQiOjE1MDQ4NzE1MjF9.iQ9nxbzmvar2DlG_848b3MTefq7q0wxyXByTb1Bb2o4&user_id=5Z5KS5&scope=sleep+settings+nutrition+activity+social+heartrate+profile+weight+location&token_type=Bearer&expires_in=587615
All 我想获取 #
之后的所有信息,就像我想在这里获取 user_id
我试过这个来完成
public function fitbitIntegration(Request $request)
{
try{
$authId = Auth::user()->id;
$fitbit = new FitbitMaster();
$fitbit->user_id = $authId;
$fitbit->fitbit_client_id = $request->user_id;
$fitbit->save();
flash('Connected', 'success');
return redirect()->back();
}
catch (QueryException $exception)
{
echo $exception->getMessage();
}
}
路线
Route::get('fitbitIntegration', 'BackEnd\fitbit@fitbitIntegration');
但是我在这里没有得到 user_id
这让我得到了完整性约束错误
如何在我的案例中得到 user_id
?
如果您想获取用户浏览器中显示的井号或锚点后的值:"standard"
HTTP 无法做到这一点,因为该值永远不会发送到服务器(因此它赢了' 在 $_SERVER["REQUEST_URI"]
或类似的预定义变量中可用)。您需要在客户端使用某种 JavaScript
魔法,例如将此值包含为 POST 参数。
那部分叫做"fragment"。如果你有任何 static url 那么你可以通过这种方式获得它:
$url=parse_url("http://localhost/abc/public/portal/fitbit/fitbitIntegration#access_token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1WjVLUzUiLCJhdWQiOiIyMjhMNjUiLCJpc3MiOiJGaXRiaXQiLCJ0eXAiOiJhY2Nlc3NfdG9rZW4iLCJzY29wZXMiOiJ3aHIgd251dCB3cHJvIHdzbGUgd3dlaSB3c29jIHdzZXQgd2FjdCB3bG9jIiwiZXhwIjoxNTA1NDU5MTM2LCJpYXQiOjE1MDQ4NzE1MjF9.iQ9nxbzmvar2DlG_848b3MTefq7q0wxyXByTb1Bb2o4&user_id=5Z5KS5&scope=sleep+settings+nutrition+activity+social+heartrate+profile+weight+location&token_type=Bearer&expires_in=587615");
echo $url["fragment"]; //This variable contains the fragment
您可以像 fitbitIntegration/{param}
一样定义路由,并在您的函数 fitbitIntegration 中添加参数,例如 fitbitIntegration ( Request $req, $param);然后你可以在你的参数上使用正则表达式来得到你想要的
Demo_Link: http://phpfiddle.org/main/code/hdcu-3axu
将动态 Url 存储在控制器中的任何变量中,然后按此操作。
<?php
//store your dynamic url in any variable
$url = "http://localhost/abc/public/portal/fitbit/fitbitIntegration#access_token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1WjVLUzUiLCJhdWQiOiIyMjhMNjUiLCJpc3MiOiJGaXRiaXQiLCJ0eXAiOiJhY2Nlc3NfdG9rZW4iLCJzY29wZXMiOiJ3aHIgd251dCB3cHJvIHdzbGUgd3dlaSB3c29jIHdzZXQgd2FjdCB3bG9jIiwiZXhwIjoxNTA1NDU5MTM2LCJpYXQiOjE1MDQ4NzE1MjF9.iQ9nxbzmvar2DlG_848b3MTefq7q0wxyXByTb1Bb2o4&user_id=5Z5KS5&scope=sleep+settings+nutrition+activity+social+heartrate+profile+weight+location&token_type=Bearer&expires_in=587615";
$access_token = substr($url, strpos($url, "#") + 1);
echo $access_token; // get the string of acess token with parametes
?>
UPDATED
注意: url 的片段部分在 #
之后它永远不会发送到服务器端,所以..它不可能得到那个使用 php 中的任何 $_SERVER[..]
但我们可以阅读它。所以现在我们可以使用 JAVA SCRIPT MAGIC
这样做:
-------------------------------------------- ----------------------------------
<?php
//Here you Can See save.php page inside an $url where its redirect with your access_token after clicking on `Click Here` link (in your case its redirect routes `fitbitIntegration` as you mentioned ). So i try to create the situation as your routes after its redirect with token, Fine !!
$url = "http://localhost/save.php/fitbitIntegration#access_token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1WjVLUzUiLCJhdWQiOiIyMjhMNjUiLCJpc3MiOiJGaXRiaXQiLCJ0eXAiOiJhY2Nlc3NfdG9rZW4iLCJzY29wZXMiOiJ3aHIgd251dCB3cHJvIHdzbGUgd3dlaSB3c29jIHdzZXQgd2FjdCB3bG9jIiwiZXhwIjoxNTA1NDU5MTM2LCJpYXQiOjE1MDQ4NzE1MjF9.iQ9nxbzmvar2DlG_848b3MTefq7q0wxyXByTb1Bb2o4&user_id=5Z5KS5&scope=sleep+settings+nutrition+activity+social+heartrate+profile+weight+location&token_type=Bearer&expires_in=587615";
?>
<a target="_blank" href="<?php echo $url; ?>"> Click Here </a>
<?php
echo '<br><br><br>';
?>
<!-- Now after redirect you have to use an javascript inside controller or inside an routes directly to aceess the url an getting an access_token, here i try to store inside the cookies of using js and retrieve it using php and echo -->
<?php
echo "<script language='javascript'>
token = window.location.hash.split('#')
document.cookie='access_token='+token[1];
document.cookie='token[1]';
alert(token[1]);
document.cookie='token[1]';
if (token[1] != '') {
//window.location.reload()
//location.reload(true);
}
else{
//document.cookie='token[1]';
}
</script>";
//token_name=$_COOKIE['access_token'];
// Here We get the access token inside the $_COOKIE['access_token'];
if(isset($_COOKIE['access_token'])){
echo $_COOKIE['access_token'];
}
?>
输出:
我在从 Fitbit 的重定向 URL 中获取 URL 参数时遇到困难 我在这里尝试在不使用社交名流或任何其他软件包的情况下集成 Fitbit。
我有以下 URL:
http://localhost/abc/public/portal/fitbit/fitbitIntegration#access_token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1WjVLUzUiLCJhdWQiOiIyMjhMNjUiLCJpc3MiOiJGaXRiaXQiLCJ0eXAiOiJhY2Nlc3NfdG9rZW4iLCJzY29wZXMiOiJ3aHIgd251dCB3cHJvIHdzbGUgd3dlaSB3c29jIHdzZXQgd2FjdCB3bG9jIiwiZXhwIjoxNTA1NDU5MTM2LCJpYXQiOjE1MDQ4NzE1MjF9.iQ9nxbzmvar2DlG_848b3MTefq7q0wxyXByTb1Bb2o4&user_id=5Z5KS5&scope=sleep+settings+nutrition+activity+social+heartrate+profile+weight+location&token_type=Bearer&expires_in=587615
All 我想获取 #
之后的所有信息,就像我想在这里获取 user_id
我试过这个来完成
public function fitbitIntegration(Request $request)
{
try{
$authId = Auth::user()->id;
$fitbit = new FitbitMaster();
$fitbit->user_id = $authId;
$fitbit->fitbit_client_id = $request->user_id;
$fitbit->save();
flash('Connected', 'success');
return redirect()->back();
}
catch (QueryException $exception)
{
echo $exception->getMessage();
}
}
路线
Route::get('fitbitIntegration', 'BackEnd\fitbit@fitbitIntegration');
但是我在这里没有得到 user_id
这让我得到了完整性约束错误
如何在我的案例中得到 user_id
?
如果您想获取用户浏览器中显示的井号或锚点后的值:"standard"
HTTP 无法做到这一点,因为该值永远不会发送到服务器(因此它赢了' 在 $_SERVER["REQUEST_URI"]
或类似的预定义变量中可用)。您需要在客户端使用某种 JavaScript
魔法,例如将此值包含为 POST 参数。
那部分叫做"fragment"。如果你有任何 static url 那么你可以通过这种方式获得它:
$url=parse_url("http://localhost/abc/public/portal/fitbit/fitbitIntegration#access_token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1WjVLUzUiLCJhdWQiOiIyMjhMNjUiLCJpc3MiOiJGaXRiaXQiLCJ0eXAiOiJhY2Nlc3NfdG9rZW4iLCJzY29wZXMiOiJ3aHIgd251dCB3cHJvIHdzbGUgd3dlaSB3c29jIHdzZXQgd2FjdCB3bG9jIiwiZXhwIjoxNTA1NDU5MTM2LCJpYXQiOjE1MDQ4NzE1MjF9.iQ9nxbzmvar2DlG_848b3MTefq7q0wxyXByTb1Bb2o4&user_id=5Z5KS5&scope=sleep+settings+nutrition+activity+social+heartrate+profile+weight+location&token_type=Bearer&expires_in=587615");
echo $url["fragment"]; //This variable contains the fragment
您可以像 fitbitIntegration/{param}
一样定义路由,并在您的函数 fitbitIntegration 中添加参数,例如 fitbitIntegration ( Request $req, $param);然后你可以在你的参数上使用正则表达式来得到你想要的
Demo_Link: http://phpfiddle.org/main/code/hdcu-3axu
将动态 Url 存储在控制器中的任何变量中,然后按此操作。
<?php
//store your dynamic url in any variable
$url = "http://localhost/abc/public/portal/fitbit/fitbitIntegration#access_token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1WjVLUzUiLCJhdWQiOiIyMjhMNjUiLCJpc3MiOiJGaXRiaXQiLCJ0eXAiOiJhY2Nlc3NfdG9rZW4iLCJzY29wZXMiOiJ3aHIgd251dCB3cHJvIHdzbGUgd3dlaSB3c29jIHdzZXQgd2FjdCB3bG9jIiwiZXhwIjoxNTA1NDU5MTM2LCJpYXQiOjE1MDQ4NzE1MjF9.iQ9nxbzmvar2DlG_848b3MTefq7q0wxyXByTb1Bb2o4&user_id=5Z5KS5&scope=sleep+settings+nutrition+activity+social+heartrate+profile+weight+location&token_type=Bearer&expires_in=587615";
$access_token = substr($url, strpos($url, "#") + 1);
echo $access_token; // get the string of acess token with parametes
?>
UPDATED
注意: url 的片段部分在 #
之后它永远不会发送到服务器端,所以..它不可能得到那个使用 php 中的任何 $_SERVER[..]
但我们可以阅读它。所以现在我们可以使用 JAVA SCRIPT MAGIC
这样做:
-------------------------------------------- ----------------------------------
<?php
//Here you Can See save.php page inside an $url where its redirect with your access_token after clicking on `Click Here` link (in your case its redirect routes `fitbitIntegration` as you mentioned ). So i try to create the situation as your routes after its redirect with token, Fine !!
$url = "http://localhost/save.php/fitbitIntegration#access_token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1WjVLUzUiLCJhdWQiOiIyMjhMNjUiLCJpc3MiOiJGaXRiaXQiLCJ0eXAiOiJhY2Nlc3NfdG9rZW4iLCJzY29wZXMiOiJ3aHIgd251dCB3cHJvIHdzbGUgd3dlaSB3c29jIHdzZXQgd2FjdCB3bG9jIiwiZXhwIjoxNTA1NDU5MTM2LCJpYXQiOjE1MDQ4NzE1MjF9.iQ9nxbzmvar2DlG_848b3MTefq7q0wxyXByTb1Bb2o4&user_id=5Z5KS5&scope=sleep+settings+nutrition+activity+social+heartrate+profile+weight+location&token_type=Bearer&expires_in=587615";
?>
<a target="_blank" href="<?php echo $url; ?>"> Click Here </a>
<?php
echo '<br><br><br>';
?>
<!-- Now after redirect you have to use an javascript inside controller or inside an routes directly to aceess the url an getting an access_token, here i try to store inside the cookies of using js and retrieve it using php and echo -->
<?php
echo "<script language='javascript'>
token = window.location.hash.split('#')
document.cookie='access_token='+token[1];
document.cookie='token[1]';
alert(token[1]);
document.cookie='token[1]';
if (token[1] != '') {
//window.location.reload()
//location.reload(true);
}
else{
//document.cookie='token[1]';
}
</script>";
//token_name=$_COOKIE['access_token'];
// Here We get the access token inside the $_COOKIE['access_token'];
if(isset($_COOKIE['access_token'])){
echo $_COOKIE['access_token'];
}
?>
输出: