php开发面试题---lavarel和tp的区别是什么(呕心整理)
一、总结
一句话总结:
反思的回顾非常有用,因为决定了我的方向和技巧
以战养己,这是非常非常好的方式
主要从大小、功能、安全性、操作等方面分析
1、lavarel的优点有哪些?
1、火:全球第一php框架,功能强大,社区活跃
2、巨匠型开发框架:Lavavel一直秉承着优雅的原则,很好的支持了composer,实现了更丰富的扩展,社区文档活跃,相较于TP,Lavavel更庞大,安全性也更高,更适合开发大中型项目,被称为“巨匠型开发框架”。
2、tp的优点有哪些?
1、国人开发,中文文档,入门简便,适合中小型项目
2、ThinkPhp简单、快速,基于MVC和面向对象,易用性较高,是一款简洁实用的轻量级框架。
3、lavarel和tp的区别是什么?
大小:tp轻量级,lavarel巨匠型
功能:lavarel更强大,也更大,比如tp里面就没有广播
安全性:防csrf攻击
操作:1、路由;2、中间件 与 前置操作和钩子
Laravel 在请求需要先定义路由,Tp5可以不定义,有pathinfo路由即可访问。
Laravel 在请求之前会有中间件, Tp5会有前置操作和钩子。
二、Laravel 和 Tp5的一些区别
1.0 Laravel 在表单提交的时候会有csrf 跨站请求伪造验证,Tp5则没有。
2.0 Laravel 在请求需要先定义路由,Tp5可以不定义,有pathinfo路由即可访问。
3.0 Laravel 在请求之前会有中间件, Tp5会有前置操作和钩子。
参考:Laravel 和 Tp5的一些区别 - 简书
https://www.jianshu.com/p/03e4ac7e3fa3
四、参考:laravel与TP的区别
1、TP框架:
ThinkPhp简单、快速,基于MVC和面向对象,易用性较高,是一款简洁实用的轻量级框架。
2、Laravel框架:
Lavavel一直秉承着优雅的原则,很好的支持了composer,实现了更丰富的扩展,社区文档活跃,相较于TP,Lavavel更庞大,安全性也更高,更适合开发大中型项目,被称为“巨匠型开发框架”。
个人感觉TP5和Laravel框架的区别已经很小了,相较于TP3,TP5支持了composer安装,配置文件位置变化,支持了闭包函数,验证方式也跟Lavarel相似,数据返回方面也可以使用return进行数据返回。
3、区别
1)提交数据的方式,Laravel在提交表单时需要在表单中加入{csrf_field}来防止跨域攻击,而TP不会。
2)路由,Laravel必须先定义,再使用,路由文件为routes.php,TP在配置文件中开启路由后,路由格式是:'路由表达式' => '路由地址和参数'(使用路由的前提是URL支持phthinfo并且开启路由),路由可以使URL更符合SEO。
3)中间件,Laravel的中间件,中间件就是HTTP请求到达之前经过的层,通过中间件我们可以验证用户是否登录等一些通用操作。
4)操作数据库方式,都可以使用实例化(建立相对应的模型类)和DB:table('表名')来操作数据库,使用原生查询时不太相同,Laravel使用Db::操作('原生sql'),TP使用Db::query('原生sql');
5)Laravel升级十分简易,而TP大版本的升级要重构代码。
Laravel最大的强项是充分运用了PHP面向对象的特行和软件工程的思想,是一个几近解耦的框架(它引入了各种各样的设计模式,如IOC模式、以来注入等)。
参考:laravel与TP的区别 - Rerise的博客 - CSDN博客
https://blog.csdn.net/jiangnanqbey/article/details/80860156
五、 TP与laravel简介
1、Tp
ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开发体验和易用性,并且拥有众多的原创功能和特性,为WEB应用开发提供了强有力的支持。 3.2版本的服务器环境要求如下: PHP5.3以上版本
2、Laravel
Laravel是一个简单优雅的PHP Web开发框架,可以将开发者从意大利面条式的代码中解放出来,通过简单、高雅、表达式语法开发出很棒的Web应用,Laravel拥有更富有表现力的语法、高质量的文档、丰富的扩展包,被称为“巨匠级PHP开发框架”。 laravel框架的安装满足条件:
PHP版本 >= 5.5.9
PHP扩展:OpenSSL
PHP扩展:PDO
PHP扩展:Mbstring
PHP扩展:Tokenizer
Laravel需要依赖 Composer管理,必须首先安装Composer。
二、tp与laravel的目录结构
1、TP目录结构:
├─index.php 入口文件
├─README.md README文件
├─Application 应用目录
├─Public 资源文件目录
└─ThinkPHP 框架目录
核心代码目录:
├─ThinkPHP 框架系统目录(可以部署在非web目录下面)
│├─Common 核心公共函数目录
│├─Conf 核心配置目录
│├─Lang 核心语言包目录
│├─Library 框架类库目录
││ ├─Think 核心Think类库包目录
││ ├─Behavior 行为类库目录
││ ├─Org Org类库包目录
││ ├─Vendor 第三方类库目录
││ ├─ ... 更多类库目录
│├─Mode 框架应用模式目录
│├─Tpl 系统模板目录
│├─LICENSE.txt 框架授权协议文件
│├─logo.png 框架LOGO文件
│├─README.txt 框架README文件
│└─index.php 框架入口文件
① C层放在application/home/controller中,M层在application/home/model,视图放在application/home/view中。
② Tp里面使用的模板引擎是smarty,所以传值以及调用模板为assign和display。
③ 实现了模板输出的替换和过滤,如__APP__,__MODULE__,__URL__,__PUBLIC__等
④ 自带一些缓存的方法,如S (数据缓存) F(快速缓存) cache(查询缓存)以及静态缓存
⑤ 对网站安全性有多重防护,输入过滤(I方法)、上传安全、防止XSS攻击、防止sql注入、表单合法性检测(create方法创建数据对象的时候,可以使用数据的合法性检测,可以使用insertFields 和 updateFiel
ds属性或者field方法)等
⑥ ThinkPHP提供了灵活的全局配置功能,采用最有效率的PHP返回数组方式定义,支持惯例配置、公共配置、模块配置、调试配置和动态配置,分别讲述了在Apache、IIS、和nginx上的伪静态配置。‘⑦ thinkphp 也采用了命名空间的方法用来区分每个文件
⑧ 在ThinkPHP中基础的模型类就是Think\Model类,该类完成了基本的CURD、ActiveRecord模式、连贯操作和统计查询,一些高级特性被封装到另外的模型扩展中。
⑨ 基础模型类的设计非常灵活,甚至可以无需进行任何模型定义,就可以进行相关数据表的ORM和CURD操作,只有在需要封装单独的业务逻辑的时候,模型类才是必须被定义的。
⑩ ThinkPHP有专门为开发过程而设置的调试模式,开启调试模式后,会牺牲一定的执行效率,但带来的方便和除错功能非常值得。
11 tp中session使用的非常灵活在任何页面都能够随意调取,不需要重复的引入,只需要开启一次session可以了。 tp中不需要反复的写路由tp框架的s ession机制在配置中文件中配置好就可以用
12 使用系统内置的I函数是避免输入数据出现安全隐患的重要手段,I函数默认的过滤方法是htmlspecialchars,如果我们需要采用其他的方法进行安全过滤,有两种方式:
+-------------------------------------------------------------------------+
| 'DEFAULT_FILTER' => 'strip_tags'
| 'DEFAULT_FILTER' => 'strip_tags,stripslashes',
+--------------------------------------------------------------------------+
13如果你没有使用I函数进行数据过滤的话,还可以在模型的写入操作之前调用filter方法对数据进行安全过滤,
如 $this->data($data)->filter('strip_tags')->add();
2、Laravel目录:
app目录包含了应用的核心代码;
bootstrap目录包含了少许文件用于框架的启动和自动载入配置,还有一个cache文件夹用于包含框架生成的启动文件以提高性能; config目录包含了应用所有的配置文件;
database目录包含了数据迁移及填充文件,如果你喜欢的话还可以将其作为 SQLite 数据库存放目录;
public目录包含了前端控制器和资源文件(图片、JavaScript、CSS等);
resources目录包含了视图文件及原生资源文件(LESS、SASS、CoffeeScript),以及本地化文件;
storage目录包含了编译过的Blade模板、基于文件的session、文件缓存,以及其它由框架生成的文件,该文件夹被细分为成app、framework和logs子目录,app目录用于存放应用要使用的文件,framework目录用于存放框架生成的文件和缓存,最后,logs目录包含应用的日志文件;
tests目录包含自动化测试,其中已经提供了一个开箱即用的PHPUnit示例;
vendor目录是laravel的核心代码库,包含Composer依赖;
M层放在在app下面,不用再给专门的文件夹,app/Http下面有个routes.php,专门存放路由,每个控制器里的方法必须都要有,app/Http/Controller下面放的是控制器,resources/views下面放的是模版,以.blade.php为结尾。配置数据库信息可以直接在。Env文件中修改就可以了。
①laravel框架对环境有要求,5.2版本的laravel要求php5.5.9以上,还要开一些扩展。
②在浏览器中请求的路由通过app/Http/routes.php进行解析,在进入相应的控制器方法,有get、post、any、match等一些方法③传值、调用模板return view('user.profile', ['user' => $user]);
④设置session值:默认session只能在本方法中获取,可以在app/Http/kernel.php设置。
+-------------------------------------------------------------------------+
| session(['chairs' => 7, 'instruments'=> 3]);
| session()->get('key');session()->put('key', $value);session(‘key’)
+--------------------------------------------------------------------------+
也可以用$request->session()->get()/put()设置
Laravel的session的配置文件配置在app/config/session.php中session的永久保存(在不过期范围内)Session::put('key', 'value');
Session驱动(file,cookie,database,memcached,array)
配置文件为config/session.php
默认使用文件驱动
File session数据存储在storage/framework/session目录下
Cookie session数据储存在经过加密的cookie中
Database session数据储存在数据库中
Memcached/redis session数据存储在memcached/redis中
Array session数据存储在简单地数组中,非持久化(常用于运行测试)
⑤在AppServiceProvider中使用share方法可以是所有模板共享数据
⑥{{ $a}}是内置的输出数据的方法,默认被转义,可以使用{!!$a!!}输出原本代码而不会被转义
⑦@foreach @endforeach @if @elseif @else @endif
⑧模板继承可以在视图中使用同一个主模板,节省代码,方便管理
⑨数据库操作可以使用原生sql语句也可以使用查询构建器
三、Laravel与Tp的路由
1、laravel路由
laravel必须先定义路由,所有应用路由都定义在app/Http/routes.php文件中。
默认情况下,routes.php 文件包含单个路由和一个路由群组,该路由群组包含的所有路由都使用了中间件组 web,而这个中间件组为路由提供了 Session 状态和 CSRF 保护功能。
而thinkphp中开启路由:“URL_ROUTER_ON”=true;
路由规则的定义格式为: '路由表达式'=>'路由地址和参数'。 2、TP路由
要使用路由功能,前提是你的URL支持PATH_INFO并开启路由路由规则的定义格式为: '路由表达式'=>'路由地址和参数'
四、Laravel与Tp基本配置与视图以及Laravel的中间件
1、laravel视图
视图文件存放在 resources/views 目录
判断视图是否存在用 view()->exists() 在所有视图之间共享数据片段,这时候可以使用视图工厂的share方法,通常,需要在服务提供者的boot 方法中调用 share 方法,你可以将其添加到 AppServiceProvider 或生成独立的服务提供者来存放它们:
2、数据显示
Blade 的 {{}} 语句已经经过 PHP 的htmlentities 函数处理以避免 XSS 攻击。 Blade 的 @include 指令允许简单的在一个视图中包含另一个 Blade视图,可以传递参数到被包含的视图@include('view.name', ['some' => 'data'])
3、Tp视图
赋值assign调用页面display
在当前模版文件中包含其他的模版文件使用include标签,Include标签支持在包含文件的同时传入参数
4、laravel基本配置
Laravel框架的所有配置文件都存放在 config 目录下。
.env中的所有配置及其值被载入到 PHP 超全局变量 $_ENV 中
5、Tp配置::
公共配置文件(默认位于Application/Common/Conf/config.php)。获取已经设置的据库连接 参数值:C('参数名称')
6、laravel的中间件
Laravel框架自带了一些中间件,包括维护模式、认证、CSRF保护中间件等。所有的中间件都位于app/Http/Middleware 目录下。
可以将中间件看做 HTTP 请求到达目标动作之前必须经过的“层”,每一层都会检查请求并且可以完全拒绝它。分配中间件到路由
首先应该在 app/Http/Kernel.php 文件中分配给该中间件一个简写的 key,默认情况下,该类的 $routeMiddleware 属性包含了 Laravel 内置的入口中间件,添加你自己的中间件只需要将其追加到后面并为其分配一个 key:
中间件在 HTTP Kernel 中被定义后,可以在路由选项数组中使用 $middleware 键来指定该中间件: Route::get('admin/profile', ['middleware' => 'auth', function (){ // }]);
五、Laravel与Tp数据库
1、laravel数据库
Laravel 支持四种类型的数据库系统:MySQLPostgres SQLite SQL Server 可以配置读写分离
运行原生 SQL 查询
DB方法:select, update,insert, delete, 和statement。数据库事务所有的填充类都位于database/seeds目录
在run方法中,可以插入任何你想插入数据库的数据
可以使用 Artisan 命令db:seed来填充数据库
2、Tp数据库
目前的数据库包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括对PDO的支持。
六、 Laravel与Tp的防范机制
参考:TP与laravel简介 - 少昊 鹰 的 IT博客 - CSDN博客
https://blog.csdn.net/qq_33620483/article/details/78062502