laravel傻瓜手册1(安装,路由,中间件,CSRF)

1.laravel安装(laravel8 composer命令)

composer create-project --prefer-dist laravel/laravel laravel

2.MVC位置(精简常用)

(1)控制器所在位置:App/Http/Controllers中
(2)模型类所在位置:App/Models中
(3)视图层所在位置:resources/view中

3.路由(laravel必须配路由访问,否则无法访问)

路由一般都写在route/web.php中

(1)普通路由:Route::get(‘路由名’,[\app\Http\Controllers\IndexController::class,‘方法名’]);

    参数:1参为路由名,2参为数组[目标类,方法名]
    注:普通路由包含get,post,put,patch,delete,options,参数都一样

(2)重定向路由:Route::redirect(‘路由名’,‘要重定向到的路由名’);

    参数:redirect('1参为路由名','2参为重定向到的目标路由名','3参为状态码(301,302)')
    注:redirect返回的状态码是302(临时重定向),可以在第三个参数中填写302(永久重定向)

(3)视图路由:Route::view(‘视图路径表达式’);

    参数:view('1参为视图路径表达式','2参为传入的变量(数组格式,键名为变量名,键值为值)')
    作用:直接返回该视图上的内容。

(4)路由参数:Route::get(‘index/{id}’);若是可选参数则是Route::get(‘index/{id?}’);

(5)路由参数约束:

    单一约束:Route::get('index/{id}')->where('id','正则表达式');    where('参数名','正则')
    全局约束:在App/Http/Providers/RouteServiceProvice.php中的boot方法中定义
                    public function boot () {
                           Route::pattern('id','正则');   //意味着所有路由中凡参数名是id的参数都会遵守这个约束
                    }

(6)路由

	命名:Route::get('index',[indexController::class,'index'])->name('i');
    参数:name('路由名称');
    作用:能快速为指定的路由进行重定向或生成url地址
    注:路由命名不能重复

(7)生成指定路由的URL:route(‘路由名’)

    $url = route('i');                      //生成链接
    return redirect()->route('i');    //重定向
    参数:route('1参为路由名','2参为参数');

(8)路由组:

Route::group(function () {
       Route::get('index',[indexController::class,'index']);
       Route::get('test',[indexController::class,'test']);
});
参数:group(/*匿名函数*/function () {//路由});
作用:可以批量设置路由属性,如设置中间件

(9)路由中间件:middleware(‘中间件别名’)

    参数:middleware('中间件别名')

注:在路由组中设置中间件,则应在group()链式操作之前调用middleware(),例如Route::middleware(‘中间件别名’)->group(),若是单条路由加中间件则写在最后Route::get(‘index’,[indexController::class,‘index’])->middleware(‘中间件别名’);

4.中间件(在请求之后到控制器之前的中间执行,laravel自带一些中间件,如身份验证,CSRF保护等,都在App/Http/Middleware中)

(1)定义中间件(命令):

	php artisan make:middleware CheckId     
	//该命令会在App/Http/Middleware下生成一个新的名为CheckId的类文件

(2)作用(例):若id大于10则跳入indexController中的test方法(路由为test),否则继续向下执行
中间件代码

<?php
namespace App\Http\Middleware;
 use Closure;
class CheckId
{
     public function handle($request, Closure $next){
         if ($request->id > 10) {
              return redirect('test');
         }
         return $next($request);
     }
}
    注:若验证id则路由参数名必须是id(Route::get('index/{id}',[indexController::class,'index']);)

(3)注册全局中间件:

	每个请求都想通过中间件的话,则在App/Http/Kernel.php中的$middleware中列出这个中间件

(4)注册路由中间件:

首先在App/Http/Kernel.php中的$routeMiddleware中添加一条数组数据[‘键名为中间件别名’ =>
\App\Http\Middleware\CheckId::class],然后路由调用middleware()方法,参数传入中间件别名即可

5.CSRF保护(laravel默认全站防止跨域请求攻击)

(1)本站数据提交:当要进行表单提交时,需要在表单中写入@csrf,否则会被拦截(因为laravel会生成一个token,VerifyCsrfToken中间件会进行验证)
(2)白名单:如果想某个路由不被保护(可以跨站请求),可在App/Http/Middleware/VerifyCsrfToken.php中的 e x c e p t 属 性 中 填 入 值 ( 不 被 保 护 的 路 由 的 U R L ) , 也 可 以 将 K e r n e l . p h p 中 的 except属性中填入值(不被保护的路由的URL),也可以将Kernel.php中的 except(URL)Kernel.phpmiddlewareGroup中的VerifyCsrfToken::class注释掉以全站关闭CSRF保护
(3)X-CSRF-TOKEN:若是POST提交方式则还需要设置头信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值