7 资源控制器

创建命令
  1. # 创建资源控制器
  2. $ php artisan make:controller BlogController --resource
  3. # 创建接口资源控制器
  4. $ php artisan make:controller BlogController --api

路由设置
Route::resource('blogs', 'BlogController');      // 设置单个资源路由

Route::resources([                                // 批量设置资源路由
    'blogs' => 'BlogController',
]); 

Route::resource('blogs', 'BlogController')       // 只开放index和show方法的路由
  ->only(['index', 'show']);

Route::resource('index', 'BlogController')       // 开放除了index和show方法的其他路由
  ->except(['index', 'show']);

Route::apiResource('blogs', 'BlogController');   // 设置单个接口资源路由(不包含表单显示页)

Route::apiResources([                             // 批量设置接口资源路由(不包含表单显示页)
    'blogs' => 'BlogController',
]);

资源路由路由示例

image.png

8 资源嵌套、浅嵌套、自定义

路由设置

Route::resource('blogs.commonts', 'CommontController');     // 资源嵌套

Route::resource('blogs.commonts', 'CommontController');     // 资源浅嵌套
  ->shallow();

Route::resource('blogs.commonts', 'CommontController');     // 命名自定义, 多个路由名设置可参考多资源设置
  ->name('index', 'blog.c.index');

Route::resource('blogs.commonts', 'CommontController');     // 参数名称自定义
  ->parameters([
    'blogs' => 'bid', 
    'comments' => 'cid', 
  ]);

资源嵌套路由
image.png

资源浅嵌套路由
image.png

9 表单伪造和CSRF保护

csrf

post提交的时添加csrf的token设置

<input type="hidden" name="_token" value="{{ csrf_token() }}" />
<!-- 在blade模板中也可直接使用blade方法 -->
@csrf

表单提交伪造

<input type="hidden" name="_method" value="put" /> <!-- 提交时候请求方式会显示为PUT -->
<!-- 在blade模板中也可直接使用blade方法 -->
@method('put')

csrf 白名单设置

修改文件为 app/Http/Middleware/VerifyCsrfToken.php

    protected $except = [
        //
      'http://www.abc.com', // 外部链接
      '/api/*',             // 通配内部链接
      '/api/xxx',           // 某一内部链接
      route('xxx')          // 某一内部链接
    ];