laravel入门知识点整理


Posted in PHP onSeptember 15, 2020

laravel入门

简介

作为PHP最常用的框架之一,Laravel的框架目录布置得尤其清晰,适用于各种类型的项目开发。今天来记录下laravel入门需要熟悉的知识点。

1、根目录

laravel入门知识点整理

其中,public/index.php是项目的入口文件

2、配置

laravel入门知识点整理

1)config目录

该文件夹下面,包含的是各种配置文件。包括mysql数据库连接信息,redis,自定义的配置文件信息等等

2).env文件

用以存储一些依赖环境的变量,比如数据库配置,因为它不会被加入到版本库中, 所以还用以配置一些敏感信息:比如正式环境的一些第三方应用账号,token 等。有点类似Yii框架中的main-local.php

用法参考:env('DB_HOST','192.168.1.223')

说明:优先使用.env文件中配置的DB_HOST对应的值,如果.env中没有配置,则使用这里设置的默认值'192.168.1.223'

laravel入门知识点整理

3)用法参考

config('redis_keys.redis_keys.all_follow_user')

3、MVC

laravel入门知识点整理

4、路由

1、routes目录

routes目录包含了应用定义的所有路由。Laravel 默认提供了四个路由文件用于给不同的入口使用:web.php、api.php、 console.php 和 channels.php。 除此之外,我们还可以自定义路由文件。

laravel入门知识点整理

这里介绍两个比较重要的官方提供的默认路由文件web.php和api.php

1)web.php

文件包含的路由通过 RouteServiceProvider 引入,都被约束在 web 中间件组中,因而支持 Session、CSRF 保护以及 Cookie 加密功能,如果应用无需提供无状态的、RESTful 风格的 API,那么路由基本上都要定义在 web.php 文件中

2)api.php

文件包含的路由通过 RouteServiceProvider 引入,都被约束在 api 中间件组中,因而支持频率限制功能,这些路由是无状态的,所以请求通过这些路由进入应用需要通过 token 进行认证并且不能访问 Session 状态。

2、路由定义

laravel入门知识点整理

稍微复杂一点的情况:

laravel入门知识点整理

3、RouteServiceProvider

文件包含的路由通过 RouteServiceProvider 引入

laravel入门知识点整理

5、中间件

提到中间件,那一定离不开app/Http/Kernel.php这个文件

1) kernel

Kernel 中定义了重要的中间件列表,所有的请求 request 在被应用处理前,都必须经过这些中间件,筛过一遍后,才会被决定如何处理。这涉及到中间件(middleware)的作用。

App\Http\Kernel

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
 /**
  * The application's global HTTP middleware stack.
  *
  * These middleware are run during every request to your application.
  *
  * @var array
  */
 protected $middleware = [
  \App\Http\Middleware\CheckForMaintenanceMode::class,
  \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
  \App\Http\Middleware\TrimStrings::class,
  \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
  \App\Http\Middleware\TrustProxies::class,
  \App\Http\Middleware\EnableCross::class,
 ];

 /**
  * The application's route middleware groups.
  *
  * @var array
  */
 protected $middlewareGroups = [
  'web' => [
   \App\Http\Middleware\EncryptCookies::class,
   \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
   \Illuminate\Session\Middleware\StartSession::class,
   // \Illuminate\Session\Middleware\AuthenticateSession::class,
   \Illuminate\View\Middleware\ShareErrorsFromSession::class,
   \App\Http\Middleware\VerifyCsrfToken::class,
   \Illuminate\Routing\Middleware\SubstituteBindings::class,
  ],
  'api' => [
//   'throttle:300,1',
   'bindings',
  ],
  'web_api' => [
//   'throttle:300,1',
   'bindings',
   'check_token'
  ],
  'admin_api' => [
//   'throttle:300,1',
   'bindings',
   'admin'
  ],
 ];

 /**
  * The application's route middleware.
  *
  * These middleware may be assigned to groups or used individually.
  *
  * @var array
  */
 protected $routeMiddleware = [
  'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
  'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
  'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
  'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
  'can' => \Illuminate\Auth\Middleware\Authorize::class,
  'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
  'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
  'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
  'check_token' => \App\Http\Middleware\CheckToken::class,
 ];
}
上面的 $middleware[] 是面向全局的,特别是针对 HTTP 以及较为底层的。后面的 $middlewareGroups[] 和 $routeMiddleware[] 是比较具体的实施层面的。应该是可以根据开发需要继续添加。

我们再看看App\Http\Kernel继承的父类Illuminate\Foundation\Http\Kernel

<?php

namespace Illuminate\Foundation\Http;

use Exception;
use Throwable;
use Illuminate\Routing\Router;
use Illuminate\Routing\Pipeline;
use Illuminate\Support\Facades\Facade;
use Illuminate\Contracts\Debug\ExceptionHandler;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Http\Kernel as KernelContract;
use Symfony\Component\Debug\Exception\FatalThrowableError;

class Kernel implements KernelContract
{
 /**
  * The application implementation.
  *
  * @var \Illuminate\Contracts\Foundation\Application
  */
 protected $app;

 /**
  * The router instance.
  *
  * @var \Illuminate\Routing\Router
  */
 protected $router;

 /**
  * The bootstrap classes for the application.
  * 引导类,起引导作用的类
  * 这些类里面基本上都有一个 bootstrap(Application $app) 方法,
  * 从不同的角度 bootstrap 应用。为最终 boot() 最准备。
  * 注意:这些事做不完,不能接受请求,或许连$request都无法正确生成。
  * @var array
  */
 protected $bootstrappers = [
  // 载入服务器环境变量(.env 文件?)
  \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class,
  // 载入配置信息(config 目录?)
  \Illuminate\Foundation\Bootstrap\LoadConfiguration::class,
  // 配置如何处理异常
  \Illuminate\Foundation\Bootstrap\HandleExceptions::class,
  // 注册 Facades
  \Illuminate\Foundation\Bootstrap\RegisterFacades::class,
  // 注册 Providers
  \Illuminate\Foundation\Bootstrap\RegisterProviders::class,
  // 启动 Providers
  \Illuminate\Foundation\Bootstrap\BootProviders::class,
 ];

 /**
  * The application's middleware stack.
  *
  * @var array
  */
 protected $middleware = [];

 /**
  * The application's route middleware groups.
  *
  * @var array
  */
 protected $middlewareGroups = [];

 /**
  * The application's route middleware.
  *
  * @var array
  */
 protected $routeMiddleware = [];

总之,Kernel 做了两件事,第一个是定义 $bootstraps[],做好了 boot 系统的准备,第二个是定义 各种 middleware,这些都对 $request 进行加工、处理、甄选、判断,最终为可以形成正确的、有效的 $response 做准备,都完成后,进行了 index.php 中的 $kernel->handle($request),返回 $response。

总结:

1) $request ---> $kernel { service providers/middlewares/routers } ---> $response

2) Kernel 是就是个大黑箱,送入请求,输出响应,我们只管往里面添加服务、中间件、路由等等。

2) middleware

laravel入门知识点整理

系统自带的VerifyCsrfToken.php

laravel入门知识点整理

自定义的中间件CheckToken.php

基本上中间件的具体过滤操作都在handle方法中完成

laravel入门知识点整理

6、日志

1) 日志的配置文件:config/logging.php

laravel入门知识点整理

2) logging.php

laravel入门知识点整理

3) 使用参考

Log::channel('wechatlog')->info("获取第三方平台component_access_token",['data'=>$data]);

然后执行请求完毕,就可以在storage/logs这个文件夹下面看到对应的日志记录

laravel入门知识点整理

7、服务提供者

1)自定义服务提供者

在laravel里面,服务提供者其实就是一个工厂类。它最大的作用就是用来进行服务绑定。当我们需要绑定一个或多个服务的时候,可以自定义一个服务提供者,然后把服务绑定的逻辑都放在该类的实现中。在larave里面,要自定一个服务提供者非常容易,只要继承Illuminate\Support\ServiceProvider这个类即可

举个栗子

app/providers/AppServiceProvider.php

laravel入门知识点整理

在这个举例里面,可以看到有一个register方法,这个方法是ServiceProvider里面定义的。自定义的时候,需要重写它。这个方法就是用来绑定服务的。

2)laravel初始化自定义服务提供者的源码

laravel入门知识点整理

3)config/app.php

从上一步的源码也能看到,laravel加载自定义服务提供者的时候,实际是从config/app.php这个配置文件里面的providers配置节找到所有要注册的服务提供者的。

laravel入门知识点整理

参考链接:https://blog.csdn.net/qqtaizi123/article/details/95949672

PHP 相关文章推荐
php下网站防IP攻击代码,超级实用
Oct 24 PHP
.htaccess文件保护实例讲解
Feb 06 PHP
逆序二维数组插入一元素的php代码
Jun 08 PHP
php 读取文件头判断文件类型的实现代码
Aug 05 PHP
php代码审计比较有意思的例子
May 07 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
Apr 01 PHP
PHP ADODB实现分页功能简单示例
May 25 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
Apr 12 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 PHP
laravel 模型查询按照whereIn排序的示例
Oct 16 PHP
PHP单元测试配置与使用方法详解
Dec 27 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 #PHP
PhpStorm+xdebug+postman调试技巧分享
Sep 15 #PHP
laravel中Redis队列监听中断的分析
Sep 14 #PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 #PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
Sep 13 #PHP
PHP重载基础知识回顾
Sep 10 #PHP
PHP反射基础知识回顾
Sep 10 #PHP
You might like
提升PHP执行速度全攻略(下)
2006/10/09 PHP
PHP开发中常用的8个小技巧
2008/08/27 PHP
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
php文件缓存类汇总
2014/11/21 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
JS定义回车事件(实现代码)
2013/07/08 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
Python写入数据到MP3文件中的方法
2015/07/10 Python
在Django中创建动态视图的教程
2015/07/15 Python
Python模块future用法原理详解
2020/01/20 Python
python的dict判断key是否存在的方法
2020/12/09 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
社区七一党员活动方案
2014/01/25 职场文书
运动会入场词200字
2014/02/15 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
客服专员岗位职责
2014/02/28 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
毕业生工作求职信
2014/06/30 职场文书
平面设计师岗位职责
2014/09/18 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL
SQL SERVER中的流程控制语句
2022/05/25 SQL Server