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类型的参数?
nginx 重写后为
@Summer
目前想到的几个解决方法
1 用原始的问号传参方式,而不用laravel路由的方式(感觉有些不美观)。
2 参数url使用base64编码,获取后再解码。
@Payne 我去,URL 里放 URL ,有点毁我三观
有点像创新性思维的毁三观 :smile_cat:
@Summer 做SSO单点登录需要的,记录目标URL,SSO服务验证成功后带一些token之类的参数再重定向到这个目标URL。
原始的get问号传参有啥不美观的,http协议就是这样设计的,不要被REST绕进去了
Route::filter('auth', function()
{
if (Auth::guest())
{
if (Request::ajax())
{
return Response::make('Unauthorized', 401);
}
else
{
return Redirect::to('/?url='.Request::url());
}
}
});
额 这个可以在定义路由的时候定义url参数,不是通过get获取吧。
@oustn 就是这种方式才不行,因为它用的是对路由地址进行正则匹配的方式,你可以随便用一个链接如http://www.baidu.com作为参数来试一下。
Route:
Route::controller('sso','SSoAuthController');
Controller:
如果此时访问的页面
URL
是http://laravel-china.org/sso?url=http://laravel-china.org
,那么打印就会是@Payne 试了一下,直接用确实不行,url是根据‘/’分割的吧。加上参数判断就可以了,后面那个参数是正则表达式,还可以更灵活。
urlencode
@Mucalscio 试过没,这个没用的
@Payne 用过呀,也可以正常接收
@Payne 我用js的 encodeURIComponent 去编码的
你这url里有 / ,当然不能获取到正确的参数
base64 url 后还是会有点小问题,需要稍微改动下
看了一下,url是根据斜线分割的,可以用正则来修改匹配方式
@leo
laravel中怎么在路由中实现这种原始的问号后带参数啊,
类似于这种wrongs?grade=521&start=1&limit=20&course=1
@SJJ KV 数组格式传入 route 函数即可
@leo
是写在routes.php里边,我写的是/points/{gid}&{cid}&{uid},但是我想要的是/points?{gid}&{cid}&{uid},最后生成类似于这种wrongs?grade=521&start=1&limit=20&course=1
我找到问题了,是我自己sb了,多谢大佬
@SJJ 请问最后是怎么实现的呢?XD
@SJJ @Kurisu laughing: route里面传个KV数组就好了,:laughing:
感谢Leo @leo :laughing:
@Kurisu 这是我刚用laravel时候遇到的问题,我只记得我是在写一个接口的时候要造一个模拟的请求,然后我后来是直接在url栏输的url,在控制器里看有什么参数传递过来
我在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)
{