欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

php – Laravel路由url与查询字符串 有大用

在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


普通分类: