欢迎各位兄弟 发布技术文章
这里的技术是共享的
在laravel 4我可以使用route()帮助器生成一个带有查询字符串的URL.但在4.1而不是:
$url = url('admin.events', array('lang' => 'en')); // admineventsurl/?lang=en
我得到:
$url = url('admin.events', array('lang' => 'en')); // admineventsurl/en
我做了一些研究,所有的laravel方法来生成url都在使用这样的参数.如何使用查询字符串生成URL?
边注.
我不同意@Steve Bauman的想法(在他的回答中),一个很少需要查询字符串的URL,并认为Laravel应至少考虑添加querystring功能(back).有很多情况下,你想要一个querystring的url而不是param基于“漂亮的url”.例如,复杂的搜索过滤器…
example.com/search/red/large/rabid/female/bunny
…可能潜在地指与…相同的精确的啮齿动物
example.com/search/bunny/rabid/large/female/red
但是,无论如何,您可以看到(编程,营销分析,SEO,用户友好),这太可怕了.即使…
example.com/search?critter=bunny&gender=female&temperament=rabid&size=large&color=red
…更长,更丑陋,在这种罕见的情况下其实更好. Net:友好的URL对于某些事情是非常好的,查询字符串对他人来说是非常好的.
回答原来的问题…
我需要一个url()的“querystring”版本 – 所以我复制了这个函数,修改了它,并把它粘在/app/start/global.php中:
/** * Generate a querystring url for the application. * * Assumes that you want a URL with a querystring rather than route params * (which is what the default url() helper does) * * @param string $path * @param mixed $qs * @param bool $secure * @return string */ function qs_url($path = null, $qs = array(), $secure = null) { $url = app('url')->to($path, $secure); if (count($qs)){ foreach($qs as $key => $value){ $qs[$key] = sprintf('%s=%s',$key, urlencode($value)); } $url = sprintf('%s?%s', $url, implode('&', $qs)); } return $url; }
例:
$url = qs_url('sign-in', array('email'=>$user->email)); //http://example.loc/sign-in?email=chris%40foobar.com
注意:看起来url()函数是可插入的,也就是可以替换它.看看在vendor / laravel / framework / src / Illuminate / Support / helpers.php:url函数包裹在一个if(!function_exists(‘url’))条件.但是你可能必须跳过箍才能做到这一点(即在它的版本之前装载它).
来自 http://www.voidcn.com/article/p-wjgsctqp-btt.html