要想了解laravel,就必须清楚laravel是什么东西?只有清楚知道laravel框架是什么才能清楚在面试,在实际工作中可能碰到的问题。那么我们首先来了解下什么是laravel?
2011年,Taylor Otwell将Laravel作为一种包含全新现代方法的框架介绍给大家。Larave框架最初的设计是为了面向MVC架构的,它可以满足如事件处理、用户身份验证等各种需求。另外它还有一个由管理数据库强力支持,用于管理模块化和可扩展性代码的软件包管理器。
Laravel 框架是世界上最流行的PHP开发框架,没有之一。近年来 Laravel 以强大、安全、优雅等特性迅速占据了 PHP 开发框架第一份额的宝座。现在 Laravel框架已成为大型互联网公司及 PHP 攻城狮们的首选框架。戏称最优雅的框架。目前laravel最高版本已经更新至6.0版本,但是目前市场的使用率来看还是在5.5~5.7为主。Laravel以他的简洁(很多方法都不用看文档直接就能推算出来),扩展齐全,大量的扩展包、开发的高效,越来越多公司开发的首选,那么现在我们大致知道laravel是什么东西之后,我们再具体分析一下他的内部运行机制。
要想搞清楚laravel的运行机制。必须搞懂三样东西:服务提供者是什么?Contract的原理?IoC容器是什么?依赖注入的原理?Facade是什么?了解过Composer?实现原理是什么?
服务提供者是所有Laravel应用程序引导启动的中心,Laravel的核心服务器、注册服务容器绑定、事件监听、中间件、路由注册以及我们的应用程序都是由服务提供者引导启动的。
contract(契约)是 laravel 定义框架提供的核心服务的接口。Contract 和 Facades 并没有本质意义上的区别,其作用就是使接口低耦合、更简单。
IoC(Inversion of Control)译为 「控制反转」,也被叫做「依赖注入」(DI)。什么是「控制反转」?对象A功能依赖于对象B,但是控制权由对象A来控制,控制权被颠倒,所以叫做「控制反转」,而「依赖注入」是实现 IoC 的方法,就是由 IoC 容器在运行期间,动态地将某种依赖关系注入到对象之中。其作用简单来讲就是利用依赖关系注入的方式,把复杂的应用程序分解为互相合作的对象,从而降低解决问题的复杂度,实现应用程序代码的低耦合、高扩展。
Laravel中的服务容器是用于管理类的依赖和执行依赖注入的工具。一句话解释:依赖注入只是一种模式:把当前类依赖的第三方实例通过参数传入的形式引入,但是如果手写依赖注入会比较费劲,管理起来也比较麻烦,因为要关心那么多类的依赖,于是就有了一个容器来自动解决这个问题,利用反射API检查类型,然后递归解决依赖。
Facades(一种设计模式,通常翻译为外观模式)提供了一个 “static”(静态)接口去访问注册到IoC容器中的类。提供了简单、易记的语法,而无需记住必须手动注入或配置的长长的类名。此外,由于对PHP动态方法的独特用法,也使测试起来非常容易。
Composer是PHP的一个依赖管理工具。工作原理就是将已开发好的扩展packagist.org composer 仓库下载到我们的应用程序中,并声明依赖关系和版本控制。这也是下载laravel、依赖文件、添加插件最快捷的方法之一。
既然原理大致的东西我们清楚之后我们再看看他实际运用的时候注意的方向:
常见采用MVC开发模式:
M–Model 模型、C–Controller 控制器,目录位置项目目录\app\Http\Controllers、V–View 视图,目录位置项目目录\resources\views,控制器只作为入口文件,模型作为对象实例化并调用,数据整理输出至显示层。视图和用户交互通过事件导致控制器改变 控制器改变导致模型改变 或者控制器同时改变两者 模型改变 导致视图改变 或者视图改变 潜在的从模型里面获得参数 来改变自己。他的好处是可以将界面和业务逻辑分离。
Laravel的最常见接口验证机制:
基于JWT实现Laravel API认证,jwt单词代表的意思就是JSON Web Token。我们在做api请求的时候,通常要使用token,来验证是否这个请求能不能访问。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的JWT的一个特性,因为它的开销很小,并且可以轻松地跨域使用。
为什么采用jwt,有什么好处:
我们常见会使用Session和cookie,session是在服务器端的,而JWT和cookie是在客户端的。Cookie被恶意关闭后会造成严重安全漏洞,或者验证机制的无效。而jwt可以有效弥补这一漏洞。
以上这些问题是laravel相当基础的问题,阐述了laravel的一些底层的原理机制,也简明讲述了一些实际开发会遇到的问题,希望对大家有所帮助。