如何将整个网址作为参数传递?

时间:2019-06-20 10:09:55

标签: laravel-5

我希望允许用户扫描QR码并访问网站。这是网址为

的参数中包含参数的搜索结果
http://example.com/qr-code/http://example.org/search/user_id=12&model_id=4&role_id=8

我的路线设置为

Route::get('qr-code/{data?}/{size?}', 'QrController@qrCode')->name('qr-code');

所以我希望我的$ data可以获取网址:

http://example.org/search/user_id=12&model_id=4&role_id=8

我的控制器有

public function qrCode(Request $request, $data = null, $size = 60) {
    dd(88);
    $data = (empty($data)) ? env('APP_URL') : $data;
    return view('qr.code')->with('qr', QrCode::size($size)->generate($data));
} 

但是我什至看不到dd(88)路由重定向到主页。 我该如何解决?

2 个答案:

答案 0 :(得分:1)

问题是Laravel不知道您将提供完整的URL作为参数。他可以这样解释一切: http://example.com/qr-code/ http:/ / search / user_id = 12&model_id = 4&role_id = 8。尝试对网址进行不同的编码。您的$ data为“ http:/”,大小为60。

答案 1 :(得分:0)

好吧,我加入了助手

function base64url_encode($s) {
    return str_replace(array('+', '/'), array('-', '_'), base64_encode($s));
}

function base64url_decode($s) {
    return base64_decode(str_replace(array('-', '_'), array('+', '/'), $s));
}

然后我从类似视图的请求中获取URI

<a href="#" data-url="{{ base64url_encode($request->getRequestUri()) }}">Click me</a>

我从JS发送参数到QrController

public function qrCode(Request $request, $data = null, $type = null, $size = 200) {
    $data = (empty($data)) ? env('APP_URL') : $data;
    if ($type == 'url') $data = env('APP_URL') . base64url_decode($data);

    return view('qr.code')->with('qr', QrCode::size($size)->generate($data));
} 

工作正常。 Base64有时带有+或/,因此这就是为什么需要同时替换-和_的原因,其次是我从env添加基本URL来构成整个地址。

Thx