laravel入门知识点整理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
laravel⼊门知识点整理
作为PHP最常⽤的框架之⼀,Laravel的框架⽬录布置得尤其清晰,适⽤于各种类型的项⽬开发。
今天来记录下laravel⼊门需要熟悉的知识点。
1、
其中,public/index.php是项⽬的⼊⼝⽂件
2、
1)config⽬录
该⽂件夹下⾯,包含的是各种配置⽂件。
包括mysql数据库连接信息,redis,⾃定义的配置⽂件信息等等
2).env⽂件
⽤法参考:env('DB_HOST','192.168.1.223')
说明:优先使⽤.env⽂件中配置的DB_HOST对应的值,如果.env中没有配置,则使⽤这⾥设置的默认值'192.168.1.223'
3)⽤法参考
config('redis_keys.redis_keys.all_follow_user')
3、
4、
1、routes⽬录
routes⽬录包含了应⽤定义的所有路由。
Laravel 默认提供了四个路由⽂件⽤于给不同的⼊⼝使⽤:web.php、api.php、 console.php 和channels.php。
除此之外,我们还可以⾃定义路由⽂件。
这⾥介绍两个⽐较重要的官⽅提供的默认路由⽂件web.php和api.php
1)web.php
⽂件包含的路由通过 RouteServiceProvider 引⼊,都被约束在 web 中间件组中,因⽽⽀持 Session、CSRF 保护以及 Cookie 加密功能,如果应⽤⽆需提供⽆状态的、RESTful 风格的 API,那么路由基本上都要定义在 web.php ⽂件中
2)api.php
⽂件包含的路由通过 RouteServiceProvider 引⼊,都被约束在 api 中间件组中,因⽽⽀持频率限制功能,这些路由是⽆状态的,所以请求通过这些路由进⼊应⽤需要通过 token 进⾏认证并且不能访问 Session 状态。
2、路由定义
稍微复杂⼀点的情况:
3、RouteServiceProvider
⽂件包含的路由通过 RouteServiceProvider 引⼊
5、
提到中间件,那⼀定离不开app/Http/Kernel.php这个⽂件
1) kernel
Kernel 中定义了重要的中间件列表,所有的请求 request 在被应⽤处理前,都必须经过这些中间件,筛过⼀遍后,才会被决定如何处理。
这涉及到中间件(middleware)的作⽤。
App\Http\Kernel
1
2
3
4
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34<?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,
3536373839404142434445464748495051525354555657585960616263646566676869
70
71
72
73
\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,
];} HTTP 以及较为底层的。
后⾯的 $middlewareGroups[] 和 $routeMiddleware[] 是⽐较具体的实施层⾯的。
应该是可以根据开发需要继续添加。
我们再看看App\Http\Kernel 继承的⽗类Illuminate\Foundation\Http\Kernel
1
2
3
4
5678910111213141516171819202122232425<?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;
2627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
70
71
72
/**
* 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)
2) middleware
系统⾃带的VerifyCsrfToken.php
⾃定义的中间件CheckToken.php
基本上中间件的具体过滤操作都在handle⽅法中完成
6、
1) ⽇志的配置⽂件:config/logging.php
2) logging.php
3) 使⽤参考
Log::channel('wechatlog')->info("获取第三⽅平台component_access_token",['data'=>$data]);
然后执⾏请求完毕,就可以在storage/logs这个⽂件夹下⾯看到对应的⽇志记录
7、服务提供者
1)⾃定义服务提供者
在laravel⾥⾯,服务提供者其实就是⼀个⼯⼚类。
它最⼤的作⽤就是⽤来进⾏服务绑定。
当我们需要绑定⼀个或多个服务的时候,可以⾃定义⼀个服务提供者,然后把服务绑定的逻辑都放在该类的实现中。
在larave⾥⾯,要⾃定⼀个服务提供者⾮常容易,
举个栗⼦
app/providers/AppServiceProvider.php
在这个举例⾥⾯,可以看到有⼀个register⽅法,这个⽅法是ServiceProvider⾥⾯定义的。
⾃定义的时候,需要重写它。
这个⽅法就是⽤来绑定服务的。
2)laravel初始化⾃定义服务提供者的源码
3)config/app.php
从上⼀步的源码也能看到,laravel加载⾃定义服务提供者的时候,实际是从config/app.php这个配置⽂件⾥⾯的providers配置节找到所有要注册的服务提供者的。