danydevco/rocket

安装: 0

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

语言:JavaScript

v1.9.0 2024-08-05 02:36 UTC

README

Rocket 是一个用于快速而有效地开始开发项目的终极工具。我们设计了这个包的目的是为了加速项目的启动,为你提供所有必要的基线,以便你能够专注于构建令人惊叹的功能,而不是处理重复性的初始配置。

  • 价值观和预配置参数:忘记在每次项目中不断定义相同的值和参数。使用 Rocket,你可以快速配置基本值和参数,根据你的偏好和标准。
  • 简化权限管理:在几分钟内实现强大的访问控制系统。Rocket 自动集成权限和角色功能,以便你能够高效地保护你的应用程序。
  • 地理数据即用即得:通过包含预定义的国家、城市和部门列表来节省时间。你再也不需要手动搜索和输入这些基本信息了。

安装

composer require Danydevco/rocket

安装包后,你必须运行以下命令:(重要)

 php artisan vendor:publish --tag=rocket-config
 php artisan migrate
 php artisan rocket:seeder

中间件

中间件 Accept-Json

这个名为 ApiResponseMiddleware 的中间件用于处理 API 的 JSON 格式响应。

  1. 首先,中间件将请求的 'Accept' 标头设置为 'application/json'。这表示应用程序期望以 JSON 格式接收响应。

  2. 然后,将请求传递给堆栈中的下一个中间件或请求控制器。

  3. 收到响应后,将响应的 'Content-Type' 标头设置为 'application/json'。这表示发送的响应是 JSON 格式。

  4. 如果响应是 JsonResponse 实例,则使用 response()->json() 方法重新格式化响应。此方法返回一个新的 JSON 响应,包含原始响应的数据和状态码。

  5. 如果响应不是 JsonResponse 实例,则简单地返回原始响应。

这个中间件确保所有 API 响应都是 JSON 格式并具有正确的标头,无论响应是在控制器中如何生成的。

# 使用示例

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "api" middleware group. Make something great!
|
*/

Route::group(['middleware' => 'accept-json'], function () {
    // Aca van las rutas de la API
});

中间件 RefreshToken

这个名为 RefreshTokenMiddleware 的中间件用于处理每个请求的访问令牌更新。

  1. 首先,中间件使用 bearerToken() 方法从请求中提取访问令牌。

  2. 如果找到令牌,则使用 PersonalAccessToken 类的 findToken() 方法在数据库中查找。

  3. 如果找到相应的访问令牌,则将其有效期延长。新的有效期通过将配置中的 rocket.sanctum.expiration 中指定的分钟数加到当前时间来计算。

  4. 最后,将更新后的访问令牌保存到数据库中,并将请求传递给堆栈中的下一个中间件或请求控制器。

这个中间件确保访问令牌在每次请求中都会自动更新,只要它们是有效的。

# 使用示例

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "api" middleware group. Make something great!
|
*/

Route::group(['middleware' => 'accept-json'], function () {

    Route::group(['middleware' => ['auth:sanctum', 'rocket.refresh.token']], function () {
        // Aca van las rutas de la API que se desean proteger
    });
});
## Opcionales

### Herramientas de Desarrollo
Para facilitar el desarrollo y depuración de tu aplicación, puedes optar por instalar las siguientes herramientas:
- **barryvdh/laravel-debugbar:** Esta herramienta te proporciona una barra de depuración en la parte inferior de tu aplicación cuando estás en el entorno de desarrollo. Para instalarla, ejecuta el siguiente comando:
``` bash
composer require barryvdh/laravel-debugbar --dev
composer require --dev barryvdh/laravel-ide-helper

请记住,这些包是可选的,并旨在用于开发环境,而不是生产环境。

发布 Rocket 包资源

Rocket提供了多种资源,您可以在主要项目中发布。为此,您可以使用以下命令

发布迁移

php artisan vendor:publish --tag=rocket-migrations

发布种子

php artisan vendor:publish --tag=rocket-seeders

发布Rocket的种子后,您需要修改项目中的主要种子DatabaseSeeder,以便它能够执行Rocket的种子。以下是一个关于您的DatabaseSeeder应该如何看的示例

use Danydevco\Rocket\seeders\RoleSeeder;
use Danydevco\Rocket\seeders\ValueSeeder;
use Danydevco\Rocket\seeders\ParameterSeeder;
use Danydevco\Rocket\seeders\CountrySeeder;
use Danydevco\Rocket\seeders\DepartmentSeeder;
use Danydevco\Rocket\seeders\CitySeeder;
use Danydevco\Rocket\seeders\UserSeeder;

class DatabaseSeeder extends Seeder {
    /**
     * Seed the application's database.
     */
    public function run(): void {
        // START ROCKET SEEDERS
        $this->call([
            RoleSeeder::class,
            ValueSeeder::class,
            ParameterSeeder::class,
            CountrySeeder::class,
            DepartmentSeeder::class,
            CitySeeder::class,
            UserSeeder::class,
        ]);
        // END ROCKET SEEDERS

        // \App\Models\User::factory(10)->create();

        // \App\Models\User::factory()->create([
        //     'name' => 'Test User',
        //     'email' => 'test@example.com',
        // ]);
    }
}

发布视图

php artisan vendor:publish --tag=rocket-views

发布资产

php artisan vendor:publish --tag=rocket-public

发布配置

php artisan vendor:publish --tag=rocket-config

发布语言文件

php artisan vendor:publish --tag=rocket-lang

这些命令将复制Rocket包中的相应资源到您的主要项目,使您可以根据需要对其进行自定义。

将表恢复到初始状态

 php artisan rocket:truncate

将Trait添加到User模型

use Illuminate\Foundation\Auth\User as Authenticatable;
use Danydevco\Rocket\Traits\UserRocketTrait;

class User extends Authenticatable{
    use UserRocketTrait;

    // ...
}

在User模型中模拟Name属性

Rocket包不使用name列在users表中。相反,它使用first_namelast_name列。但是,您可以使用Rocket包提供的UserRocketTraitUser模型中模拟name属性。

UserRocketTrait包括一个用于name属性的访问器,它返回first_namelast_name的拼接。这使您可以在User模型实例中访问name属性,就像数据库中存在该列一样。

以下是一个如何使用此访问器的示例

$user = User::find(1);
echo $user->name; // Imprime "Nombre Apellido"

令牌有效期

默认情况下,Sanctum的令牌每30分钟过期。但是,如果您想为应用程序中的API令牌配置不同的过期时间,您可以通过在config/rocket.php文件中定义的配置来实现。此配置选项允许定义在令牌发出后多长时间将其视为过期。

 /*
     |--------------------------------------------------------------------------
     | Config Sanctum by Rocket
     |--------------------------------------------------------------------------
     */
    'sanctum' => [

        /*
        |--------------------------------------------------------------------------
        | Expiration Minutes
        |--------------------------------------------------------------------------
        */
        'expiration' => 30,
    ],

默认的表是

  • users(更新Laravel的users表)
  • personal_access_tokens
  • model_has_permissions
  • role_has_permissions
  • permissions
  • model_has_roles
  • roles
  • values
  • parameters
  • countries
  • departments
  • cities

默认用户

默认API路由

以下是在应用程序中可用的API路由列表