cuongdev / larab
CuongDev Laravel 启动项目抽象
v9.0.1
2024-01-17 07:52 UTC
Requires
- php: ^7.4 || ^8.0
- laravel/framework: ^v8.0.0 || ^9.0.0 || ^10.0.0
- prettus/l5-repository: ^2.9.0
- spatie/laravel-permission: ^6.3.0
- tymon/jwt-auth: ^2.0.0
README
CuongDev Laravel 启动项目抽象
用作 Laravel 项目基础的源代码
https://github.com/cuongdev2408/larab
I. 开始
- 安装
- 安装主要包
- 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
- 结构
- 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
-
继承
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());
}
}