Lumen 是一个由 Laravel 组件搭建而成的微框架,由 Laravel 官方维护。Lumen 为速度而生,是当前最快的 PHP 框架之一
先安装依赖管理工具Composer
通过 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:
522 Origin Connection Time-out
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
});
});
$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
使用:
$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
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);
本文参考: