Laravel路由
laravel是一个强路由的框架,所有的请求都必须先定义好路由才能访问。
1、路由配置文件
路由文件的位置:项目目录/routes/web.php文件
2、4种基础路由的定义(重点)
Route::请求方式('uri',匿名函数);
#从服务器取出资源(一项或多项)
Route::get($uri, $callback);
#在服务器新建一个资源 insert
Route::post($uri, $callback);
#在服务器更新资源 update
Route::put/patch($uri, $callback);
#从服务器删除资源 delete
Route::delete($uri, $callback);
4种基础路由中,只有GET请求方式不进行CSRF验证,其它请求方式则需要CSRF验证
3、CSRF
1.CSRF(Cross-site request forgery)跨站请求伪造,攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
2.laravel框架中,路由定义在routes/web.php文件中,就会自带有csrf验证功能。
3.并不是所有请求都需要进行CSRF攻击防御的,比如去第三方API获取数据的请求。可以通过在 app/Http/Middleware/VerifyCsrfToken.php文件中将要排除的请求URI添加到$except属性数组中。
4、其它路由
# 一次性匹配多种请求类型
Route::match(array(请求方式,多个以逗号隔开),$uri, $callback);
# 匹配所有请求 工作不用 不安全
Route::any($uri, $callback);
注:如果路由请求方法没有定义,请求不存在的方法,报405状态
5、路由参数
url地址可以通过query方式去传参数,但是不美观且还不利于seo优化。laravel提供一种路由参数的机制,更佳优美的方式来进行参数的传递。laravel路由参数不用使用$_GET函数来获取,只能通过它自身的方式来获取。
# 必填
Route::get('URI/{参数名称}','闭包函数或控制器响应方法标识');
# 可选
Route::get('URI/{参数名称?}','闭包函数或控制器响应方法标识');
# 参数限制
Route::get('URI/{参数名称}','闭包函数或控制器响应方法标识')->where(['参数名称'=>'正则']);
6、路由别名
作用:方便管理生成的URL地址 和 权限控制
Route::get('/user/{id}',function($id){
return "当前用户id是:" . $id;
}) -> name('名字');
# 生成了对应的URL地址 参数
$url = route('路由名称',[array(key=>value)]);
7、路由分组之路由前缀
很多路由都有相同的前缀,每次都需要敲一遍太繁琐,所以就可以把统一的前缀摘出来 做路由分组
可以用 prefix 方法为路由组中给定的 URL 增加前缀。例如,你可以为组中所有路由的 URI 加上 admin 前缀:
Route::prefix('admin')->group(function () {
Route::get('users', function () {
// 匹配包含 "/admin/users" 的 URL
});
});
路由名称前缀
name 方法可以用来给路由组中的每个路由名称添加一个给定的字符串。 例如,您可能希望以 「admin」为所有分组路由的名称加前缀。 给定的字符串与指定的路由名称前缀完全相同,因此我们将确保在前缀中提供尾部的 . 字符:
Route::name('admin.')->group(function () {
Route::get('users', function () {
// 路由分配名称“admin.users”...
})->name('users');
});
8、查看定义好的路由
php artisan route:list