Laravel控制器以及CSRF学习
- 控制器的定义的位置,统一放在app/Http/Controllers
- 明明空间 namespace App\Http\Controllers;
- Colltroller的这个类不要修改
- 文件名和类名一样,首字母大写
- 类名 模型名 + Controller.php,这个是规则
- 可以继承 Controller.php文件,最好继承
- 可以对模型下的建立文件夹,分模块进行处理,但是要注意命名空间,需要把模型文件带上,也就是整个文件路径。
命名空间:namespace App\Http\Controllers\目录名
一、定义控制器的路由
-
在定义控制器路由的时候,不需要制定完整的控制器命名空间
Route::get('user', 'UserController@index'); // 注意,这里要是在`app/Http/Controllers`下面有模型的文件夹,那就得需要在定义路由的时候,添加模型的路由文件夹 Route::get('user', 'User/UserController@index');
二、单行为控制器
-
处理单个行为的控制器,你可以在控制器中放置一个
__invoke
方法Route::get('user', '控制器'); // 会默认进入到__invoke方法
三、资源控制器以及资源路由
- Laravel资源路由将典型的[CRUD]路由分配给具有但航代码的控制器。
- 创建多个路由来处理资源上的各种行为,生成的控制器为每个行为保留了方法
- 也就是创建一个路由,然后对控制器里面的方法进行操作。这样控制器里面的方法名是固定的,不能修改
Route::resource(’/article’, ‘ArticleController’);
四、部分资源路由
-
部分资源路由
// 只允许访问 Route::resource('/article', 'ArticleController', ['only'=>['index', 'store']]); // 除了这些都可以访问 Route::resource('/article', 'ArticleController', ['except'=>['index', 'store']]);
五、Views基础-Laravel视图/模版引擎Blade
-
这个就是MVC中的View,给用户展示的视图
-
Blade是Laravel提供的一个简单而又强大的模版引擎。和其他的流行的PHP模版引擎不同,Blade并不限制你在视图中使用原声的PHP代码。
-
所有的Blade视图文件都将被编译成原生的PHP代码并缓存起来,除非它被修改,否则不会重新编译,这就意味着Blade基本上不会给你的应用增加任何负担。
-
定义规则:Blade视图文件使用
.blade.php
作为文件扩展名,存放在resources/views
目录。这个view是一个助手函数。若函数不是在views下面的话,需要将目录带上。public function index() { // 助手函数 return view('index'); // return view('user.index'); }
-
传数据到视图
public function index() { // 助手函数 // 两种传数据到视图的方式,一种是with,另一种是[]内 return view('index', ['age'=>'33'])->with('name', '刘德华'); }
六、CSRF保护以及设置使用
-
Laravel可以轻松地保护应用程序免受**跨站点请求伪造(CSRF)**攻击,跨站点请求伪造是一种恶意攻击,它凭借已通过身份验证的用户身份来运行未经过授权的命令。
-
Laravel会自动为每个活跃的用户的绘画生成一个CSRF[令牌],该令牌用于验证经过身份验证的用户是否是向应用程序发出请求的用户。
-
无论何时,当您在应用程序中定义HTML表单时,都应该在表单中包含一个隐藏的CSRF标记字段,一边CSRF保护中间件可以验证该请求,您可以使用
@csrf Blade
指令来生成令牌字段 -
from表单 添加@csrf 或者 {{csrf_field()}},主要对post、put、delete、patch
// 这三种都可以 <from method="POST" action="/profile"> @csrf // {{csrf_field()}} // <input type="hidden" name="_token" value={{csrf_token()}}> </from>
-
csrf白名单,将需要排除的路由,一般情况下时针对第三方的post请求,添加到except数组中,若参数不固定,可以添加
user/*
的模式。 -
表单请求方法,可以在里面添加方法名
@method(方法名)
或者{{method_filed(方法名)}}
<from action="/article/2" method="post"> @csrf @method('delete') <input type="submit" value="提交"> // 也可以直接写死 // <input type"hidden" name="_method" value="patch"> </from>