路由的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