二、Laravel入门使用(路由)
什么是路由:将用户的请求按照事先规划的方案提交给指定的控制器或者功能函数来进行处理.【通俗的讲,路由就是访问地址形式】 在博客中,当我们在URL地址中,传递p(平台)、c(控制器)、a(方法)三个参数时,系统会自动跳转到指定模型中指定控制器的指定方法,这些处理过程都是由框架自动完成的。但是,在Laravel框架中,其并没有指定固定参数,其路由必须要手工进行配置。
1、路由配置文件位置
路由文件在routes/web.php。
后续我们自己定义的路由都需要在该文件中去声明。
2、routesweb.php配置文件中配置路由(重点)
(1)默认根路由 问题:为什么当我们在浏览器中访问虚拟域名http://域名时,如何显示Laravel5?
答:原因是在路由文件web.php中,其已经定义好了一个路由,这个路由称之为“根路由”,一般用于访问网站的首页。
(2)路由定义格式: Route::请求方式(‘请求的URL’, 匿名函数或控制器响应的方法)
比如请求域名下根目录
代码语言:javascript复制Route::get('/',function(){return 'hello world’;});
函数的返回值,就是请求的响应。
页面上的显示:
又比如请求:http://域名/home地址则路由写成: Route::get(’/home’,function(){return ‘您当前访问的是/home地址’;}); 显示:
注意:路由地址中的第一个“/”可以不写(包括“根路由”)。
如果还有更多的路由需要去定义,则仿照上述的形式语法继续编写即可。但是只要需要访问,则必须需要定义路由。 如果路由错误或者没有定义则会看到以下错误页面(以Laravel5.4.30为准)
如果是5.5以后的版本,则提示如下:
(3)请求方式有哪些?
如果要解决“”这样的问题,则需要下面的两个方法解决:
常见的四个方法:
代码语言:javascript复制get方法:表示匹配请求类型为get的请求;
post方法:表示匹配请求类型为post的请求;
macth方法:表示匹配用户指定的几个请求类型(通过第一个参数去指定)的请求;
语法:Route::match([‘get’,’post’,’…’],$url,$calback);
any方法:表示匹配路由所支持的全部请求类型;
如果路由方法与实际的请求类型不一致,则会报错
在5.5及以后的版本中报错如下:
3、路由参数
路由参数其实就是给路由传递参数。 参数分为必选参数和可选参数。
必选参数:一旦在路由中定义了,则必须传递,不传递就会报错。
代码语言:javascript复制例如:
Route::get(‘home1/{id}’,function($id){
echo ‘输入的id是’ . $id;
});
路由参数的传递通过路由地址中的“{参数名}”的形式来进行传递,该形式是必选参数的形式,可以选的则使用“{参数名?}”。
如果设定了可选路由参数,但是又没有给默认值同时也没传递,则报错:
扩展: 路由参数除了上述的2种传递方式之后,还支持传统的路由参数传递:
代码语言:javascript复制url?id=xxx&aaa=xxxx
这种方式传递参数不受路由的限制的,不需要在路由文件中事先定义好路由参数,例如:
4、路由别名(alias)【重点】
路由别名相当于在路由定义的时候,为路由起了一个别名,在以后的程序中可以通过这个别名来获取路由的信息。/absafvdsadssdbfdsfa/qwdasd1312213fberfdvf/ascdfadvs => url1
后期在视图中会频繁使用到这样的代码“<a href=’{{route(‘url1’)}}’>xxxx</a>”
场景:在后期需要频繁的定义跳转地址,但是如果这些地址写死了的话,万一发生变化,得全部修改,这个操作比较麻烦,因此可以使用路由别名的机制(定义路由的时候给路由起名字,在后期需要使用路由的时候直接调用名字)去简化以后的操作。
给路由起名字的语法: Route::请求类型(路由地址,响应方法) -> name(别名);
例如:给hello的路由起名字“h1”
调用该路由则可以写成:route(‘名字’);例如像刚才的h1,则需要写成route(‘h1’)
扩展补充:查看系统已经有的路由命令:#php artisan route:list
5、路由群组(理解)【实用】
有后台有如下路由
代码语言:javascript复制/admin/login
/admin/logout
/admin/index
/admin/user/add
/admin/user/del
.....
他们的共同点(这个共同点不局限于只是前缀)是,都有/admin/前缀,为了管理方便,可以把他们放到一个路由分组中,这个分组称之为路由群组。
使用prefix属性指定路由前缀,也就是其路由中都具备的相同部分。
语法:Route::group(公共属性数组,回调函数); 回调函数中放的剔除公共属性之后的路由
比如,想要为所有路由URLs前面添加前缀admin
代码语言:javascript复制Route::group(['prefix' => 'admin], function () {
Route::get(login, function () {
// 匹配 "/admin/login" URL
});
Route::get(logout, function () {
// 匹配 "/admin/logout" URL
});
Route::get(user/add, function () {
// 匹配 "/admin/user/add" URL
});
});
记住:以大局为重。
案例:编写路由/home/test/test1和/home/test/test2,要求使用路由群组 公共点:/home/test
代码语言:javascript复制Route::group([‘prefix’ => ‘home/test’],function(){
Route::get(‘test1’,function(){
});
Route::get(‘test2’,1function(){
});
});
注意:使用路由群组不会改变其原有在地址栏中输入的地址。变的只是路由定义的写法。
在后期还会接触到middleware(中间件)属性。