Lumen框架
Lumen 是一个由 Laravel 组件搭建而成的微框架,由 Laravel 官方维护。Lumen 为速度而生,是当前最快的 PHP 框架之一
安装
先安装依赖管理工具Composer
- 下载链接:https://getcomposer.org/Composer-Setup.exe
通过 Lumen 安装器
composer global require "laravel/lumen-installer=~1.0"
安装完成后通过lumen new初始化项目
lumen new 项目名
也可以通过composer create-project安装项目
composer create-project laravel/lumen 项目名 "5.1.*"(版本号)
如果下载lumen安装器很慢,可以换个镜像:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
创建一个新项目:
composer create-project --prefer-dist laravel/laravel name of your project
如果遇到这个报错:
Server error: GET http://cabinet.laravel.com/latest.zip resulted in a 522 Origin Connection Time-out response:
<html>
<head><title>522 Origin Connection Time-out</title></head>
<body bgcolor="white">
<center><h1>522 Origin Conne (truncated...)
可以将镜像源改为:
https://packagist.org
项目新建成功后:
运行helloworld:
先安装下开发环境,可以参考这篇文章
配置
Lumen 框架的配置信息都存储在 .env
文件中
路由
基本路由
-
可以在
app/Http/routes.php
定义路由,该文件将会被bootstrap/app.php
加载// 最基本的路由形式 $app->get("/url",function(){ }) $app->get('/get', function () { return 'Hello World'; }); $app->post('post', function () { return 'Hello World'; }); $app->put('put', function () { // }); $app->delete('delete', function () { // });
-
请求参数
-
restful风格:从url中获取到请求参数
$app->get('posts/{post}/comments/{comment}', function ($postId, $commentId) { // });
-
可以通过在路由中定义定义正则表达式来约束路由参数格式,也可以通过这个进行参数的简单校验
$app->get('user/{name:[A-Za-z]+}', function ($name) { // });
-
controller处理请求,也是一般推荐的做法
$app->get('profile', [ 'uses' => 'UserController@showProfile' ]);
将会被UserController的showProfile方法处理该请求,然后可以通过showProfile方法中的形参$request通过input方法获取到指定的参数
$request->input("key");// 获取参数名为key的参数值
-
-
路由组
-
路由组是用来定义路由的公共属性的,例如公共路由前缀,控制器controller的命令空间,公共的中间件等等
- 公共路由前缀
$app->group(['prefix' => 'admin'], function () use ($app) { $app->get('users', function () { // Matches The "/admin/users" URL }); });
- controller命名空间
$app->group(['namespace' => 'App\Http\Controllers\Admin'], function() use ($app) { // 控制器在「App\Http\Controllers\Admin」命名空间 }
- 中间件:按照定义顺序执行
$app->group(['middleware' => 'auth'], function () use ($app) { $app->get('/', function () { // Uses Auth Middleware }); $app->get('user/profile', function () { // Uses Auth Middleware }); });
-
中间件
HTTP中间件用于过滤HTTP请求,所有请求将会按照中间件的注册顺序依次通过中间件,lumen也内置了相关中间件,都放于app/Http/Middleware
下,也可以自己写一个中间件:重写handle方法即可:
public function handle($request, Closure $next){
// 过滤逻辑
return $next($request); // 通过该中间件,调用下一个中间件,一层一层过滤
}
前置和后置中间件:
-
区别在于
$next($request)
的调用时机- 过滤逻辑后调用:前置中间件,先过滤请求,后执行请求
public function handle($request, Closure $next){ // 过滤逻辑 return $next($request); // 通过该中间件,调用下一个中间件,一层一层过滤 }
- 过滤逻辑前调用,后置中间件,请求处理完后执行中间件逻辑
public function handle($request, Closure $next){ $response = $next($request); // 通过该中间件,调用下一个中间件,一层一层过滤 // 过滤逻辑 return $response }
中间件编写完成后,注册中间件:
- 全局中间件:所有请求都会执行,只要将中间件的类加入到
bootstrap/app.php
的$app->middleware()
调用参数数组中。
$app->middleware([
App\Http\Middleware\OldMiddleware::class // 加入中间件即可
]);
-
指定路由中间件
-
现在
bootstrap/app.php
为中间件指定key$app->routeMiddleware([ 'auth' => App\Http\Middleware\Authenticate::class, // auth => Authenticate ]);
-
指定路由使用指定中间件,
$app->get('admin/profile', ['middleware' => 'auth', function () { // }]); $app->get('/', ['middleware' => ['first', 'second'], function () { // }]);
-
控制器
控制器就是将所有的请求处理逻辑封装为一个类,控制器一般存放在 app/Http/Controllers
目录下。
自定义控制器只需要写一个类继承Controller
<?php
namespace App\Http\Controllers;
class MyController extends Controller{
// 请求处理方法
public function handle(){
}
}
使用:
$app->get("/url",[
"uses"=> 'MyController@handle' // 形式:controller类名@方法名
])
依赖注入
class A{
// A依赖于B
protected $b;
public function __construct(B $b){
$this->b = $b
}
}
class B{
}
服务提供者:
class MyServiceProvider extends ServiceProvider{
// 书写register方法注册服务到容器中
public function register(){
$this->app->bind('a',function($app){
$b = new B();
return new A($b);
})
}
}
使用容器的register方法将这个服务绑定到容器中:
$app->register(\App\Providers\MyServiceProvider::class);
获取实例:
$a = $app->make('a')
在框架使用中可以通过use xxx,服务容器会自动注入相关实例,比如Request
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function store(Request $request)
{
$name = $request->input('name');
}
}
日志
Lumen 集成了 Monolog 日志函数库,Monolog 支持和提供多种强大的日志处理功能。
Log::emergency($error);
Log::alert($error);
Log::critical($error);
Log::error($error);
Log::warning($error);
Log::notice($error);
Log::info($error);
Log::debug($error);
本文参考:
- https://learnku.com/docs/lumen/5.3/validation/1896