cuongdev/larab

CuongDev Laravel 启动项目抽象

v9.0.1 2024-01-17 07:52 UTC

This package is auto-updated.

Last update: 2024-09-28 09:00:02 UTC


README

CuongDev Laravel 启动项目抽象

用作 Laravel 项目基础的源代码

https://github.com/cuongdev2408/larab

I. 开始

  1. 安装
  • 安装主要包
    - cuongdev/larab
  • 包括以下必需包
    - prettus/l5-repository
    - tymon/jwt-auth
    - spatie/laravel-permission
  • 如有需要,安装 mongodb 包
    - jenssegers/mongodb

注意

- spatie/laravel-permission 与 jenssegers/mongodb 不兼容

- 安装完包后,请按照每个包的安装指南进行操作。

  • 配置 L5-repository

https://github.com/andersao/l5-repository#installation

  • 配置 JWT Auth

https://jwt-auth.readthedocs.io/en/develop/laravel-installation/ https://jwt-auth.readthedocs.io/en/develop/quick-start/

  • 配置 Spatie Laravel-permission

https://spatie.be/docs/laravel-permission/v3/installation-laravel

  • 修改 config/queues.php 以使用 DB transaction(如果使用 mongodb)

https://github.com/jenssegers/laravel-mongodb#queues

  • 将中间件添加到 app/Http/Kernel.php
    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'api' => [
            // Additional middleware
            \CuongDev\Larab\App\Http\Middleware\CheckRouteBlacklist::class,
        ],
    ];

    protected $routeMiddleware = [
        // Additional middleware
        'auth.jwt' => \Tymon\JWTAuth\Http\Middleware\Authenticate::class, // JWT middleware
        'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
        'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
        'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
    ];
  • 修改 config/auth.php 文件
'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
],

...

'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],
  • 模型 User 继承 \CuongDev\Larab\App\Models\User

  • 在 .env 文件中添加环境变量

##### CuongDev Larab
# Admin account
SUPER_ADMIN_EMAIL="admin@gmail.com"
SUPER_ADMIN_PASSWORD=123456

#Project Environment
JWT_SECRET=
JWT_PUBLIC_KEY=
JWT_PRIVATE_KEY=
JWT_PASSPHRASE=
JWT_TTL=1440
JWT_REFRESH_TTL=
JWT_ALGO=
JWT_LEEWAY=
JWT_BLACKLIST_ENABLED=
JWT_BLACKLIST_GRACE_PERIOD=
  • 运行命令
    php artisan key:generate
    php artisan vendor:publish --provider "Prettus\Repository\Providers\RepositoryServiceProvider"
    php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
    php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
    php artisan jwt:secret
    
    // Development
    php artisan optimize:clear
    // Production
    php artisan optimize
    
    php artisan migrate
    php artisan db:seed --class=CuongDev\\Larab\\Database\\Seeders\\LarabSeeder
  1. 结构
  • CuongDev Larab 提供了一套 Core,方便继承,快速构建功能,并轻松操作数据库。
Core: 
    - Controllers:
        - AApiCrudController
        - ABaseApiController
    - Models:
        - AAuthenticatableModel
        - AModel
        - AMongodbAuthenticatableModel
        - AMongodbModel 
    - Repositories:
        - ABaseRepository
    - Services:
        - ABaseService   
 
Abstraction:       
    Definition:
        - Constant
        - DefinePermission 
        - DefineRole 
        - DefineRoute 
        - Message
        - StatusCode 
        
    Library:
        - Helper
        
    Object:
        - ApiResponse
        - Result
  1. 继承

    a) 抽象

  • 在项目 app 目录下创建一个 Abstraction 目录
Abstraction:       
    Definition:
        - DefinePermission
        - DefineRole
        - DefineRoute

    Library:
        - Helper
  • 文件 app/Abstraction/DefinePermission
<?php

namespace App\Abstraction\Definition;

class DefinePermission extends \CuongDev\Larab\Abstraction\Definition\DefinePermission
{
    public function __construct()
    {
        $this->setPermissionGroups([

        ]);

        $this->setPermissions([

        ]);
    }
}

  • 文件 app/Abstraction/DefineRole
<?php

namespace App\Abstraction\Definition;

class DefineRole extends \CuongDev\Larab\Abstraction\Definition\DefineRole
{
    public function __construct()
    {
        $this->setRoles([

        ]);
    }
}
  • 文件 app/Abstraction/DefineRoute
<?php

namespace App\Abstraction\Definition;

class DefineRoute extends \CuongDev\Larab\Abstraction\Definition\DefineRoute
{
    public function __construct()
    {
        $this->setBlacklist([

        ]);
    }
}
b) Seeders
  • AclSeeder:此文件用于构建权限系统。除了包中预定义的默认权限外,您还可以通过创建新的 seeder 并扩展 AclSeeder 来定义额外的角色、权限组、权限。
    • 输入数据是以下格式的数组
[
   'key_name_1' => 'Display Name 1',
   'key_name_2' => 'Display Name 2',
]
<?php

namespace Database\Seeders;

use App\Abstraction\Definition\DefinePermission;
use App\Abstraction\Definition\DefineRole;
use CuongDev\Larab\Database\Seeders\AclSeeder;

class CustomAclSeeder extends AclSeeder
{
    public function __construct()
    {
        parent::__construct();
        $this->defineRole->setRoles((new DefineRole())->getRoles());
        $this->definePermission->setPermissionGroups((new DefinePermission())->getPermissionGroups());
        $this->definePermission->setPermissions((new DefinePermission())->getPermissions());
    }
}