laravel(laravel框架还有人用吗)
一、为什么那么多人吹捧laravel
本人作为一个php开发老司机告诉你laravel框架设计思想是很先进的
其实任何框架语言能被开发出来说明它能够解决一部分人的需求,不必纠结
laravel非常适合应用各种开发模式TDD,DDD和BDD,作为一个框架,它为你准备好了一切,可以说composer解决了php难题
而且laravel使用了大量设计模式,框架完全符合设计模式的五大基本原则,模块之间耦合度很低,服务容器可以方便的扩展框架功能以及编写测试,非常优雅
如果你觉得laravel很困难那么原因只有一个你php基础不够好
它最有名的PHP框架,Github上两万多star,比第二第三多出两倍,高效开发
为了解决大家进阶的难题,我准备了一套中高级进阶学习教程
还可加入大牛学习圈子,分享tp,laravel,swoole,swoft微服务等教程,各种大牛都是3-8年PHP开发者,每天还有11年的架构师做讲解,助你进阶中高级PHP程序员,增值涨薪!需要可关注本头条号,并且发送私信关键词:PHP
二、Laravel如何开发api
引言
我们一直在讲,通过路由传达到控制器,处理好数据并渲染到视图,但是对于现代的应用,前后端分离的情况下,后端写个接口就完事儿了。
本期为大家说一说用laravel写restful风格的API,看看能有多简单。
以路由开端
写API接口,与传统的渲染前端模板页面有什么区别?少了视图,只需要准备好数据,并按照规则格式化,返回就可以了。
laravel默认的api接口路由在routes/api.php文件内定义,默认的情况下预定义了一个资源类型的api接口,代码如下:
Route::middleware('auth:api')->get('/user',function(Request$request){return$request->user();});
调用了auth:api中间件用于验证用户的授权,如果授权通过,声明的get方法获取用户的信息,并返回User模型。这在之前的章节是很常见的操作,我们不做赘述了。
那么这个路由文件,是什么时候加载上去的呢?在文件app/Providers/RouteServiceProvider.php内,看这样一段:
protectedfunctionmapApiRoutes(){Route::prefix('api')->middleware('api')->namespace($this->namespace)->group(base_path('routes/api.php'));}
该服务提供者声明路由使用api字符前缀,并调用api中间件,该中间件定义在app/Http/Kernel.php文件内:
protected$middlewareGroups=['api'=>['throttle:60,1',\Illuminate\Routing\Middleware\SubstituteBindings::class,],];
至于命名空间$this->namespace一般返回App\Http\Controllers,我们为了区分API与其他应用,在目录app/Http/Controller下创建API目录,用于存储所有API相关的控制器。
那么上述的RouteServiceProvider.php文件内mapApiRoutes方法内的namespace需要这样写:
->namespace($this->namespace.'\API')
仍然以Event模型作为示例,在routes/api.php文件内声明一个资源类型的路由:
Route::resource('/events','API\EventsController');
注意命名空间上多出来的前缀API\,这说明我们是把EventController文件放在了API目录下。
用户权限
让我们把目光还聚焦在系统默认声明的那条路由:
Route::middleware('auth:api')->get('/user',function(Request$request){return$request->user();});
注意中间件auth:api,因为api请求是无状态的,每次请求之间没有任何关联,所以使用用户权限区分资源的返回。那么我们怎么拿到用户授权呢?这在config/auth.php文件内定义,看系统自带的这一段配置代码:
'guards'=>['api'=>['driver'=>'token','provider'=>'users','hash'=>false,],],
这一段定义了我们使用何种方式认证用户的身份。默认的驱动token定义在框架文件laravel/framework/src/Illuminate/Auth/TokenGuard.php内。长话短说,默认构造类传入的字段如下:
UserProvider$provider,Request$request,$inputKey='api_token',$storageKey='api_token',$hash=false
简单说,就是使用users表的api_token字段用户鉴权。那么默认我们users表显然缺少一个这样的字段,现在使用迁移文件补上:
phpartisanmake:migrationadd_api_token_field_to_users_table--table=users
首先是迁移方法up函数:
publicfunctionup(){Schema::table('users',function(Blueprint$table){$table->string('api_token',60)->unique();});}
还有回滚使用的down方法:
publicfunctiondown(){Schema::table('users',function(Blueprint$table){$table->dropColumn('api_token');});}
这些都是常规操作,我们在之前的章节,使用了N多次了。执行指令迁移数据库:
phpartisanmigrate
看看效果
准备好了路由,而且路由内声明了一个get方法返回用户模型数据。也准备好了数据库表字段api_token。我们在数据库表内找到一个用户数据,把api_token值设置为1234,用于测试。
现在在浏览器内请求类似如下的url地址:
如无异常,顺利会输出一个json字符串,
{"id":1,"provider":null,"provider_id":null,"first_name":"Tom","last_name":"Hanks","email":"tom@admin.com","city":"","state_id":null,"zip":"43016","lat":null,"lng":null,"timezone":"America\/New_York","title":"LaravelDeveloper","created_at":"2020-10-1417:46:19","updated_at":"2020-10-1417:46:20","last_login_at":null,"is_admin":0,"api_token":"1234"}
这个json格式的数据是怎么来的呢?是在路由内,$request->user()方法返回的User模型,使用toArray()格式化方法获得的。为了演示,很多字段与实际可能有所出入。
特别需要注意的是,关键的密码字段,以及token字段,是默认隐藏的,这得益于User模型内$hiden属性的定义:
protected$hidden=['password','remember_token',];
这些字段都对对外不公开访问。
写在最后
本文介绍了如何声明api地址,已经解释了api从中间件到路由的由来,明白了api授权的方式,可以为我们更灵活地定制授权方式提供便利。这在laravel内都是可插拔的,替换为我们的逻辑代码就可以愉快工作了。
Happycoding:-)
我是@程序员小助手,专注编程知识,圈子动态的IT领域原创作者
三、laravel和swoole的出现能挽救PHP的颓势吗
首先我作为一名phper老司机告诉你,任何框架都是为了让语言开发更便捷
laravel框架存在时间比较长、swoole是最近两年才火起来的
swoole重新定义php,可进入通信行业,物联网行业,让php焕发了第二春
PHP是目前语言使用率最稳定的不存在太高但是也不低
这两个框架想要深入底层原理学习都必须掌握php中高级进阶知识点
laravel组件、内核源码,swoole高并发、多进程、通讯等知识掌握
为了解决大家进阶的难题,我准备了一套中高级进阶学习教程
还可加入大牛学习圈子,分享tp,laravel,swoole,swoft微服务等教程,各种大牛都是3-8年PHP开发者,每天还有11年的架构师做讲解,助你进阶中高级PHP程序员,增值涨薪!需要可关注本头条号,并且发送私信:PHP