您的位置:首页 > 编程语言 > PHP开发

laravel5学习笔记(3)——复杂的路由

2015-06-12 11:48 190 查看
路由的url地址,除了前面讲的直接设定外,更加强大的地方在于可以通过模板的形式设定。

我们考虑这样一个问题:

要为每一个用户做一个主页,这个主页在目录/users/之下,传统的PHP,要访问名字为johnson的用户的主页,url的形式可能是:
http://localhost/users/page.php?name=johnson
通过name参数将用户名传递给网页。

这样的url不仅形式上不够优雅,对参数的管理也不方便——例如假设一个纯数字的用户名是不合法的,我们必须在page.php专门进行处理,才能把这个不合法的参数排除。

而对于laravel来说,在路由中进行适当设定后,用这样一个url就可以实现了:
http://localhost/users/johnson
不仅形式上优雅,而且把所有url的管理放到一个文件之中,让项目的管理更加方便、一目了然。

路由解析url的形式是这样的:

Route::get('users/{name}',function($name){

echo "<h1>$name</h1>";

});

其中’users/{name}',的花括号的内容,就是模板要匹配的部分,并且把这个匹配的内容传递给参数$name,进一步传递给要执行的函数。

在路由文件中设置这样一个路由,你键入http://localhost/users/johnson,就可以看到浏览器显示“johnson"。

模板中花 括号中的内容也可以是可选的,可以设成这种形式

Route::get('users/{name?}',function($name='boss'){

echo "<h1>$name</h1>";

});

这样,如果你输入
http://localhost/users/
就显示出默认值boss的页面。

除此之外,还可以用正则式对url的内容进行进一步筛选。例如同样在”users"下面,有的人是输入名字,有的人是输入qq号,对于名字和qq我要作不同的处理,这里假定名字是纯字母构成,而qq号是纯数字构成,那么可以设置这样两条路由:

Route::get('users/{name},function($name){

echo "name:$name";

})->where('name','[A-Za-z]+');

Route::get('users/{name},function($name){

echo "qq:$name";

}))->where('name','[0-9]+');

这样输入http://localhost/users/john,就显示:name:john

输入http://localhost/users/123456,就显示:qq:123456
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: