laravel入门知识点整理
laravel入门
简介
作为PHP最常用的框架之一,Laravel的框架目录布置得尤其清晰,适用于各种类型的项目开发。今天来记录下laravel入门需要熟悉的知识点。
1、根目录
其中,public/index.php是项目的入口文件
2、配置
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'
3)用法参考
config('redis_keys.redis_keys.all_follow_user')
3、MVC
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
<?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, ]; }
我们再看看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
系统自带的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里面,要自定一个服务提供者非常容易,只要继承Illuminate\Support\ServiceProvider这个类即可。
举个栗子
app/providers/AppServiceProvider.php
在这个举例里面,可以看到有一个register方法,这个方法是ServiceProvider里面定义的。自定义的时候,需要重写它。这个方法就是用来绑定服务的。
2)laravel初始化自定义服务提供者的源码
3)config/app.php
从上一步的源码也能看到,laravel加载自定义服务提供者的时候,实际是从config/app.php这个配置文件里面的providers配置节找到所有要注册的服务提供者的。
参考链接:https://blog.csdn.net/qqtaizi123/article/details/95949672
相关文章
- 如果我们需要安培Laravel4的话最php最低要求要在php5.3.7版本并且我们需要把mcrypt与openss这两个扩展开启才可以,具体步骤我们参考下文。 前面我们介绍我了 com...2016-11-25
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 这篇文章算是超级入门级别的了,我们下面来给各位介绍在photoshop画斜线/直线/虚线的教程了,希望下面这篇文章给你入门来帮助。 PS怎么画斜线 选择铅笔工具,或者画笔...2016-09-14
Laravel 调试工具 laravel-debugbar 打印日志消息
laravel-debugbar 调试工具的教程小编整理了几篇不错的教程,今天我们来看一篇Laravel 调试工具 laravel-debugbar 打印日志消息例子,希望文章对各位有帮助。 其实不...2016-11-25Laravel 5.1中定义事件、事件监听器以及触发事件例子
下文我们来看一篇关于Laravel 5.1中定义事件、事件监听器以及触发事件例子,希望能够帮助到各位新手朋友的哦。 这里我们基于之前基于模型+缓存对文章增删改查这篇...2016-11-25- 这篇文章主要为大家分享了20分钟MySQL基础入门教程,快速掌握MySQL基础知识,真正了解MySQL,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-12-02
- Laravel框架我们用到的不多了,但如果使用需要搭配了,下面我们来看一篇关于搭建php Laravel框架教程详解,具体的操作细节如下所示,希望对各位有帮助。 一、安装 Compos...2016-11-25
- 你可能想创建一个在应用的任何地方都可以访问的函数,这个篇文章将带你解决此问题,感兴趣的同学,可以参考下。...2021-05-27
- Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁...2016-11-25
- 这篇文章主要介绍了详解Servlet入门级设置(超详细 IDEA2020版),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-04
- 这里主要讲到关于在php教程类的调用,申请明,使用以前各种类的实例方法与操作过程,让你清楚的知道php类的construct destruct clone call wake sleep用法。 简单购物车...2016-11-25
- 数据表之间是纵横交叉、相互关联的,laravel的一对一,一对多比较好理解,本文重点通过实例给大家讲解 laravel中的多对多关系,感兴趣的朋友一起看看吧 数据表之间是纵...2017-07-06
- MySQL发展到今天,InnoDB引擎已经作为绝对的主力,除了像大数据量分析等比较特殊领域需求外,它适用于众多场景。然而,仍有不少开发者还在“执迷不悟”的使用MyISAM引擎,觉得对InnoDB无法把握好,还是MyISAM简单省事,还能支持快...2015-11-24
- 这篇文章主要介绍了阿里云ECS服务器入门使用流程(新手必看教程),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-13
- PHP大小写问题算是一个入门级的教程了,在此小编为php初学者介绍php开发中大小写的一些例子,希望可以帮助到各位。 今天写代码的时候发现自己代码的一处错误: $m_cate...2016-11-25
- 本文给大家讲解的是在laravel中是怎么实现autoload的?分析之后才发现,真的是很巧妙,下面就来给大家详细说明下...2017-05-21
- 这篇文章主要介绍了C语言入门之基础知识详解,文中有非常详细的C语言使用教程及相关基础知识,对正在学习c语言的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-08-04
- Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,本文给大家分享一个入门案例使用Springboot1.5.9搭建,具体配置部署过程跟随小编一起看看吧...2021-07-12
- 刚在大略浏览了一下首页更新的那篇有关Class的文章(指PHPE的那篇 http://www.phpe.net/articles/389.shtml ),很不错,建议看看。 对类的摸索~~俺用了半年时间才大概理解类的...2016-11-25
- Laravel的主要技术特点:1、Bundle是Laravel的扩展包组织形式或称呼。Laravel的扩展包仓库已经相当成熟了,可以很容易的帮你把扩展包(bundle)安装到你的应用中。你可以选择下载一个扩展包(bundle)然后拷贝到bundles目录,或者...2015-10-21