我希望允许用户扫描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)路由重定向到主页。 我该如何解决?
答案 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