默认路由文件
所有的 Laravel 路由都在 routes 目录中的路由文件中定义,这些文件都由框架自动加载。routes/web.php 文件用于定义 web 界面的路由。这里面的路由都会被分配给 web 中间件组,它提供了会话状态和 CSRF 保护等功能。定义在 routes/api.php 中的路由都是无状态的,并且被分配了 api 中间件组。
大多数的应用构建,都是以在 routes/web.php 文件定义路由开始的。可以通过在浏览器中输入定义的路由 URL 来访问 routes/web.php 中定义的路由。例如,你可以在浏览器中输入 http://www.feishuai.vip/user 来访问以下路由:
Route::get('/user', 'UserController@index');
routes/api.php 文件中定义的路由通过 RouteServiceProvider 被嵌套到一个路由组里面。在这个路由组中,会自动添加 URL 前缀 /api 到此文件中的每
路由配置文件
路由文件的位置:项目目录/routes/web.php文件
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验证
CSRF
CSRF(Cross-site request forgery)跨站请求伪造,攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
laravel框架中,路由定义在routes/web.php文件中,就会自带有csrf验证功能。
并不是所有请求都需要进行CSRF攻击防御的,比如去第三方API获取数据的请求。可以通过在 app/Http/Middleware/VerifyCsrfToken.php文件中将要排除的请求URI添加到$except属性数组中。
其它路由
# 一次性匹配多种请求类型
Route::match(array(请求方式,多个以逗号隔开),$uri, $callback);
# 匹配所有请求 工作不用 不安全
Route::any($uri, $callback);
注:如果路由请求方法没有定义,请求不存在的方法,报405状态
路由参数
url地址可以通过query方式去传参数,但是不美观且还不利于seo优化。laravel提供一种路由参数的机制,更佳优美的方式来进行参数的传递。laravel路由参数不用使用$_GET函数来获取,只能通过它自身的方式来获取。
# 必填
Route::get('URI/{参数名称}','闭包函数或控制器响应方法标识');
# 可选
Route::get('URI/{参数名称?}','闭包函数或控制器响应方法标识');
# 参数限制
Route::get('URI/{参数名称}','闭包函数或控制器响应方法标识')->where(['参数名称'=>'正则']);
路由别名
作用:方便管理生成的URL地址 和 权限控制
Route::get('/user/{id}',function($id){
return "当前用户id是:" . $id;
}) -> name('名字');
# 生成了对应的URL地址 参数
$url = route('路由名称',[array(key=>value)]);
路由分组之路由前缀
很多路由都有相同的前缀,每次都需要敲一遍太繁琐,所以就可以把统一的前缀摘出来 做路由分组
可以用 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');
});
查看定义好的路由
php artisan route:list
使用路由缓存
老实说, 使用路由缓存很简单. 有一个新的 Artisan 命令 route:cache 可以把 routes.php 文件中的所有路由定义序列化 -- 会对所有的路由进行一次解析然后把解析结果缓存起来. 如果你曾经用过 Handlebars 模板的预编译的话, Laravel 5 的路由缓存机制跟它有点类似.
这样就已经搞定了. 执行完这个命令以后, 所有的路由都是从缓存文件而不是路由文件进行读取. 之后你可以对 routes.php 的随意进行修改, 但应用的路由不会发生变化, 一直到再次执行 route:cache 重新缓存.
优点和缺点
优点很明显: 网站的速度会更快.
但缺点也不得不提: 只要缓存过一次网站的路由定义, 以后每次对 routes.php 文件进行修改都需要重新执行缓存操作, 否则修改不会生效. 这可能会造成部分开发者的疑惑, 有可能你可能怎么修改 routes.php 都没用, 偏偏一时没想到是路由缓存造成的.
幸亏有两个方法可以解决这个问题.
第一种方法: 可以执行 artisan route:clear , 这样 artisan 会删除路由缓存.
第二种方法: 可以考虑只在正式环境使用路由缓存. 然后在 Git 的 post-deploy 钩子中执行 artisan route:cache , 或者在部署脚本中来执行它.