lumen框架搭建

乜璞瑜
2023-12-01

lumen框架搭建


前言

`提示:windows 下部署 测试环境


一、composer安装

1.查看composer版本

composer --version

2、安装composer

composer install 

3、更新composer

composer update --no-scripts

二、lumen 框架部署

1.conposer安装lumen

composer global require "lumen-installer" 
##或者
composer create-project --prefer-dist laravel/lumen vnapi

2.部署所需的插件

// 1、安装JWT
composer require tymon/jwt-auth
//配置
一、把 vendor/tymon/jwt-auth/config/config.php 文件拷贝到根目录下 Config 文件夹中并把它重命名为 jwt.php (获取 jwt 配置文件);

二、在 bootstrap/app.php 文件中注册 JWT 的配置文件、开启 auth 路由中间件和 开启AuthServiceProvider服务、注册 JWT 服务提供者如下:
        // jwt 配置文件
        $app->configure('jwt');
        //开启 auth 路由中间件
        $app->routeMiddleware([
            'auth' => App\Http\Middleware\Authenticate::class,
        ]);
        //需要添加的注册服务
        $app->register(App\Providers\AuthServiceProvider::class);
        $app->register(App\Providers\AppServiceProvider::class);
        // jwt服务提供者
        $app>register(Tymon\JWTAuth\Providers\LumenServiceProvider::class);
三、生成 JWT_SECRET 写入.env(自动写入)
        php artisan jwt:secret
        //会生成如下的套餐
        JWT_SECRET=
       
        JWT_TTL=10080

3.安装及配置 Dingo

	composer require dingo/api 

2、配置Dingo
    a、把 Dingo 的配置文件夹 (vendor/dingo/api/config)拷贝到根目录;
    
	b、在 .env 中写入 Dingo 配置 ( 具体配置见: [https://learnku.com/docs/dingo-api/2.0.0/Configuration/1444](https://learnku.com/docs/dingo-api/2.0.0/Configuration/1444) )
    
    #以下是我的配置:

    API_STANDARDS_TREE=vnd  
    API_SUBTYPE=lumen
    API_PREFIX=api 
    #子域名  (前缀和子域名只能存在一个)可选
    #API_DOMAIN=api.myapp.com 
    API_VERSION=v1
    API_NAME=api-demo
    #API_CONDITIONAL_REQUEST=false 
    #API_STRICT=false 
    API_DEFAULT_FORMAT=json 
    API_DEBUG=true
    
c、 在 bootstrap/app.php 文件中开启门面和Eloquent模型, 注册 Dingo 的配置文件和 Dingo 服务提供者并开启应用服务提供者,如下:
    
    $app->withFacades();  //使用门面
    $app->withEloquent(); //使用Eloquent模型
    
    $app->configure('api');  //注册dingo配置文件(也就是 config/api.php)
    
   //注册服务
    $app->register(App\Providers\AppServiceProvider::class);
    // $app->register(App\Providers\AuthServiceProvider::class);
    // $app->register(App\Providers\EventServiceProvider::class);
    // dingo服务提供者
    $app->register(Dingo\Api\Provider\LumenServiceProvider::class);

4.修改 api.php 和 jwt.php 配置文件

在 api.php 的 auth 数组中添加 api 权限验证类

	'auth' => [
	    'jwt' => Dingo\Api\Auth\Provider\JWT::class,  // api 权限验证类
	],

把 jwt.php providers 数组中的 token 生成类(Lcobucci)修改为 Namshi 如下:

	'providers' => [
	    //'jwt' => Tymon\JWTAuth\Providers\JWT\Lcobucci::class, // 使用 attempt() 方法生成 token (不推荐使用这方法)
	    
	    'jwt' => Tymon\JWTAuth\Providers\JWT\Namshi::class, //使用 formUser() 方法生成 token 

5.把 vendor/laravel/lumen-framework/config/auth.php 文件拷贝到根目录下 Config 文件夹中并做相应配置, 如下:

'guards' => [
   'api' => [
       'driver' => 'jwt',
       'provider' => 'users',
   ],
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ]
],

6.在 .env 中配置数据库

APP_NAME=Lumen
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
#设置php时区(中国时区:PRC;默认: UTC)
APP_TIMEZONE=PRC

LOG_CHANNEL=stack
LOG_SLACK_WEBHOOK_URL=

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=severname
DB_USERNAME=root
DB_PASSWORD=root

CACHE_DRIVER=file
QUEUE_CONNECTION=sync

API_STANDARDS_TREE=vnd  
API_SUBTYPE=lumen
API_PREFIX=api 
#子域名  (前缀和子域名只能存在一个)可选
#API_DOMAIN=api.myapp.com 
API_VERSION=v1
API_NAME=api-demo
#API_CONDITIONAL_REQUEST=false 
#API_STRICT=false 
API_DEFAULT_FORMAT=json 
API_DEBUG=true

7.创建 routes/api/v1.php 文件管理路由

<?php
    $api = app('Dingo\Api\Routing\Router');
    
    // v1 version API
    // add in header    Accept:application/vnd.lumen.v1+json
    $api->version('v1', [
        'namespace' => 'App\Http\Controllers\Api\V1',
        'middleware' => [
            'cors'
        ],
        // each route have a limit of 20 of 1 minutes
        'limit' => 1000, 'expires' => 1,
    ], function ($api) {
        // Auth
        $api->group(["prefix" => 'auth'], function ($api) {
            $api->post('/login', 'AuthController@login');
            $api->post('/register', 'AuthController@register');
             // need authentication
            $api->group(['middleware' => 'api.auth'], function ($api) {
                $api->post('/refresh', 'AuthController@update');
                $api->post('/logout', 'AuthController@destroy');
            });
        });
    
    });

8.在 bootstrap/app.php 加载管理路由的文件, 如下:

$app->router->group([
    'namespace' => 'App\Http\Controllers',
], function ($router) {
    require __DIR__.'/../routes/web.php';
    require __DIR__.'/../routes/api/v1.php'; //管理路由文件
});

9.关于解决请求跨域问题

a、 安装 palanik/lumen-cors  (具体用法见: [https://github.com/palanik/lumen-cors](https://github.com/palanik/lumen-cors) )
    
    composer require palanik/lumen-cors:dev-master
    
b、 在 bootstrap/app.php 中添加 cors 路由中间件( 在路由组中使用该中间件 )
    
    $app->routeMiddleware([
        'auth' => App\Http\Middleware\Authenticate::class,
        'cors' => palanik\lumen\Middleware\LumenCors::class,
    ]);

#总结
还存在问题:
1、php时区的问题
2、接口加密

 类似资料: