初识Lumen框架

Lumen框架

文章目录

  • 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:

  
  522 Origin Connection Time-out
  
  

522 Origin Conne (truncated...)

可以将镜像源改为:

https://packagist.org

项目新建成功后:

初识Lumen框架_第1张图片

运行helloworld:

先安装下开发环境,可以参考这篇文章

初识Lumen框架_第2张图片

配置

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

使用:

$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);

本文参考:

  • https://learnku.com/docs/lumen/5.3/validation/1896

你可能感兴趣的:(PHP)