Laravel 路由不支持将 url 作为参数?

举个例子,通过 http://localhost/login?url=http://laravel.... 在get请求中是可以获取url数值的,但是通过Laravel的路由 http://localhost/login/url/http://laravel.... (这里面加url只是为了语义化)这样则无法获取get请求中的url数值,即使通过将url进行urlencode()好像也无法获取,是不是Laravel的路由方式就无法通过get获取这种url类型的参数?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 25
Summer
http://localhost/login

nginx 重写后为

http://localhost/index.php/login
7年前 评论

@Summer
目前想到的几个解决方法
1 用原始的问号传参方式,而不用laravel路由的方式(感觉有些不美观)。
2 参数url使用base64编码,获取后再解码。

7年前 评论
Summer

@Payne 我去,URL 里放 URL ,有点毁我三观

1 用原始的问号传参方式,而不用laravel路由的方式(感觉有些不美观)。

7年前 评论
Summer

有点像创新性思维的毁三观 :smile_cat:

7年前 评论

@Summer 做SSO单点登录需要的,记录目标URL,SSO服务验证成功后带一些token之类的参数再重定向到这个目标URL。

7年前 评论
leo

原始的get问号传参有啥不美观的,http协议就是这样设计的,不要被REST绕进去了

7年前 评论

Route::filter('auth', function()
{
if (Auth::guest())
{
if (Request::ajax())
{
return Response::make('Unauthorized', 401);
}
else
{
return Redirect::to('/?url='.Request::url());
}
}
});

7年前 评论

额 这个可以在定义路由的时候定义url参数,不是通过get获取吧。

 router->get('login/url/{url}',LoginController@login)
public login($url) {
......
}
7年前 评论

@oustn 就是这种方式才不行,因为它用的是对路由地址进行正则匹配的方式,你可以随便用一个链接如http://www.baidu.com作为参数来试一下。

7年前 评论

Route:

Route::controller('sso','SSoAuthController');

Controller:


 public function getIndex(Request $request)
    {
        dd($request->all());
    }

如果此时访问的页面URLhttp://laravel-china.org/sso?url=http://laravel-china.org ,那么打印就会是


 array{
   "_url" => "/sso",
   "url" => "laravel-china.org"
}

7年前 评论

@Payne 试了一下,直接用确实不行,url是根据‘/’分割的吧。加上参数判断就可以了,后面那个参数是正则表达式,还可以更灵活。

router->get('login/url/{url}',LoginController@login)->where('url', '.*$');
7年前 评论

@Mucalscio 试过没,这个没用的

7年前 评论

@Payne 用过呀,也可以正常接收

7年前 评论

@Payne 我用js的 encodeURIComponent 去编码的

7年前 评论

你这url里有 / ,当然不能获取到正确的参数
base64 url 后还是会有点小问题,需要稍微改动下

7年前 评论

看了一下,url是根据斜线分割的,可以用正则来修改匹配方式

Route::get('login/url/{url}', function ($url) {
    dd($url);
})->where('url', '.*');
7年前 评论

@leo
laravel中怎么在路由中实现这种原始的问号后带参数啊,
类似于这种wrongs?grade=521&start=1&limit=20&course=1

6年前 评论
leo

@SJJ KV 数组格式传入 route 函数即可

6年前 评论

@leo
是写在routes.php里边,我写的是/points/{gid}&{cid}&{uid},但是我想要的是/points?{gid}&{cid}&{uid},最后生成类似于这种wrongs?grade=521&start=1&limit=20&course=1

6年前 评论

我找到问题了,是我自己sb了,多谢大佬

6年前 评论
Kurisu

@SJJ 请问最后是怎么实现的呢?XD

6年前 评论
Kurisu

@SJJ @Kurisu laughing: route里面传个KV数组就好了,:laughing:
感谢Leo @leo :laughing:

6年前 评论

@Kurisu 这是我刚用laravel时候遇到的问题,我只记得我是在写一个接口的时候要造一个模拟的请求,然后我后来是直接在url栏输的url,在控制器里看有什么参数传递过来

6年前 评论
running8

我在laravel-admin里这么用的:
路由:$router->get('article/{id}', 'ArticlesController@create');
$show->title('名称')->link(route(''article.create',['id'=>$id]));//声明数组,直接用$id不行:create?5
声明了数据,url就是这样了:create?id=5
public function create(Request $request,Content $content)
{
$id=$request->input('id');

.
.

protected function form($id)
{

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!