tritue.edu.vn


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

Copy
         

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

Copy
         

{
    "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

Copy
         

# Laravel URL Security

Automatic URL encoding and decoding.

Features

- Sqids
- HMAC Signature
- Auto Encode
- Auto Decode
- Route Filter
- Query Ignore


Bước 4: CHANGELOG

Copy
         

1.0.0

- Initial Release


Bước 5: LICENSE

Copy
         

MIT


Bước 6: Tạo file config/url-security.php

Copy
         

<?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

Copy
         

<?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

Copy
         

composer dumpautoload




Link chia sẻ bài viết
Copy
            https://tritue.edu.vn/tuecode/tracnghiem30/site/data/YVdRc01qVTBMRjl5YjNWMFpTeGlZV2wyYVdWMEwzQnZjM1F2ZG1sbGR3PT0%3D