Tự tạo packages mã hoá url trong Lavarel
cấu trúc chung của packages:
url-security
│
├── composer.json
│
├── README.md
│
├── CHANGELOG.md
│
├── LICENSE
│
├── config
│ └── url-security.php
│
├── database
│ └── migrations
│
├── resources
│
├── routes
│
├── tests
│
└── src
│
├── Commands
│
├── Contracts
│
├── Events
│
├── Exceptions
│
├── Facades
│
├── Http
│ └── Middleware
│
├── Providers
│
├── Services
│
└── Support
Sau đây tôi sẽ minh hoạ việc tạo 1 package mã hoá url tên là url-security
Bước 1. Tạo tạo cấu trúc thư mục cho package
mkdir src
mkdir config
mkdir database
mkdir database/migrations
mkdir resources
mkdir routes
mkdir tests
mkdir src/Commands
mkdir src/Contracts
mkdir src/Events
mkdir src/Exceptions
mkdir src/Facades
mkdir src/Http
mkdir src/Http/Middleware
mkdir src/Providers
mkdir src/Services
mkdir src/Support
Bước 2: Tạo composer.json
{
"name": "tuetamsuphu/url-security",
"description": "Automatic URL Security for Laravel",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "TueTamSuPhu"
}
],
"autoload": {
"psr-4": {
"TueTamSuPhu\\UrlSecurity\\": "src/"
}
},
"extra": {
"laravel": {
"providers": [
"TueTamSuPhu\\UrlSecurity\\Providers\\UrlSecurityServiceProvider"
]
}
},
"require": {
"php": "^8.2",
"sqids/sqids": "^0.4"
}
}
Bước 3: Tạo README.md
# Laravel URL Security
Automatic URL encoding and decoding.
Features
- Sqids
- HMAC Signature
- Auto Encode
- Auto Decode
- Route Filter
- Query Ignore
Bước 4: CHANGELOG
1.0.0
- Initial Release
Bước 5: LICENSE
MIT
Bước 6: Tạo file config/url-security.php
<?php
return [
/*
|--------------------------------------------------------------------------
| Enable Package
|--------------------------------------------------------------------------
*/
'enabled' => env('URL_SECURITY_ENABLED', true),
/*
|--------------------------------------------------------------------------
| Sqids
|--------------------------------------------------------------------------
*/
'min_length' => env('URL_SECURITY_MIN_LENGTH', 8),
/*
|--------------------------------------------------------------------------
| Signature
|--------------------------------------------------------------------------
*/
'signed' => env('URL_SECURITY_SIGNED', true),
'signature_length' => env('URL_SECURITY_SIGNATURE_LENGTH', 10),
/*
|--------------------------------------------------------------------------
| Ignore Parameters
|--------------------------------------------------------------------------
*/
'ignore_parameters' => [
'page',
'search',
'keyword',
'slug',
'locale',
'token',
],
];
Bước 7: Tạo file src/Providers/UrlSecurityServiceProvider.php
<?php
namespace TueTamSuPhu\UrlSecurity\Providers;
use Illuminate\Routing\Router;
use Illuminate\Support\ServiceProvider;
use TueTamSuPhu\UrlSecurity\Http\Middleware\DecodeUrlMiddleware;
use TueTamSuPhu\UrlSecurity\Routing\UrlGenerator;
class UrlSecurityServiceProvider extends ServiceProvider
{
/**
* Register package services.
*/
public function register(): void
{
/*
|--------------------------------------------------------------------------
| Merge config
|--------------------------------------------------------------------------
*/
$this->mergeConfigFrom(
dirname(__DIR__, 2) . '/config/url-security.php',
'url-security'
);
/*
|--------------------------------------------------------------------------
| Override Laravel Url Generator
|--------------------------------------------------------------------------
*/
$this->app->singleton('url', function ($app) {
$url = new UrlGenerator(
$app['router']->getRoutes(),
$app['request'],
$app['config']['app.asset_url'] ?? null
);
$url->setSessionResolver(function () use ($app) {
return $app->bound('session')
? $app['session']
: null;
});
$url->setKeyResolver(function () use ($app) {
return $app['config']['app.key'];
});
$app->rebinding('request', function ($app, $request) {
$app['url']->setRequest($request);
});
return $url;
});
}
/**
* Bootstrap package.
*/
public function boot(): void
{
/*
|--------------------------------------------------------------------------
| Publish Config
|--------------------------------------------------------------------------
*/
$this->publishes([
dirname(__DIR__, 2) . '/config/url-security.php'
=> config_path('url-security.php'),
], 'url-security-config');
/*
|--------------------------------------------------------------------------
| Load Migrations
|--------------------------------------------------------------------------
*/
$this->loadMigrationsFrom(
dirname(__DIR__, 2) . '/database/migrations'
);
/*
|--------------------------------------------------------------------------
| Register Middleware
|--------------------------------------------------------------------------
*/
$router = $this->app->make(Router::class);
$router->pushMiddlewareToGroup(
'web',
DecodeUrlMiddleware::class
);
/*
|--------------------------------------------------------------------------
| Publish only when console
|--------------------------------------------------------------------------
*/
if ($this->app->runningInConsole()) {
// Sau này thêm:
//
// $this->commands([
// InstallCommand::class,
// ]);
//
// $this->publishes([...], 'url-security-migrations');
//
}
}
}
Chạy composer dumpautoload xem lỗi không
composer dumpautoload
https://tritue.edu.vn/tuecode/tracnghiem30/site/data/YVdRc01qVTBMRjl5YjNWMFpTeGlZV2wyYVdWMEwzQnZjM1F2ZG1sbGR3PT0%3D