Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

AmRo045/LaravelHashId

Repository files navigation

Laravel Hash Id

This package uses Hashids under the hood.

Installation

You can add this package to your project by running the following command in your project root directory:

composer require amro045/laravelhashid

Configuration

Once you added the package, you can configure the package by publishing the package default configuration using this command:

php artisan laravelhashid:install

Usage

First add the HasHashId trait to your model:

<?php
namespace App\Models;
use AmRo045\LaravelHashId\Traits\HasHashId;
class User extends Model
{
 use HasHashId;
}

this trait will add the hash_id property to your model, so you can use this property to create a URL with hash-id. Example:

route('users.show', $user->hash_id);
// output: https://example.com/users/q1Ba7DXlJ9lKg6V2

then add the ResolveHashId middleware in app\Http\Kernel.php file:

/**
 * The application's middleware aliases.
 *
 * Aliases may be used to conveniently assign middleware to routes and groups.
 *
 * @var array<string, class-string|string>
 */
protected $middlewareAliases = [
 'auth' => \App\Http\Middleware\Authenticate::class,
 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
 'can' => \Illuminate\Auth\Middleware\Authorize::class,
 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
 'signed' => \App\Http\Middleware\ValidateSignature::class,
 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
 'hashid' => \AmRo045\LaravelHashId\Http\Middleware\ResolveHashId::class, // πŸ–οΈ
];
/**
 * The priority-sorted list of middleware.
 *
 * Forces non-global middleware to always be in the given order.
 *
 * @var string[]
 */
protected $middlewarePriority = [
 \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class,
 \Illuminate\Cookie\Middleware\EncryptCookies::class,
 \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
 \Illuminate\Session\Middleware\StartSession::class,
 \Illuminate\View\Middleware\ShareErrorsFromSession::class,
 \Illuminate\Contracts\Auth\Middleware\AuthenticatesRequests::class,
 \Illuminate\Routing\Middleware\ThrottleRequests::class,
 \Illuminate\Routing\Middleware\ThrottleRequestsWithRedis::class,
 \Illuminate\Contracts\Session\Middleware\AuthenticatesSessions::class,
 \AmRo045\LaravelHashId\Http\Middleware\ResolveHashId::class, // Add before the SubstituteBindings middleware
 \Illuminate\Routing\Middleware\SubstituteBindings::class,
 \Illuminate\Auth\Middleware\Authorize::class,
];

NOTE: For more information about the $middlewarePriority array, checkout the documentations.

and finally you can use ResolveHashId middleware like this:

Route::get('/users/{user}', function(User $user) {
 return $user;
})->middleware('hashid');

Middleware Parameters

You may want to ignore some parameters from decoding. To do so, you can pass ignore parameter to hashid middleware like this:

Route::get('/users/{user}/posts/{post}/comments/{comment}', function(User $user, Post $post, Comment $comment) {
 return func_get_args();
})->middleware('hashid:ignore=post&comment');

if you want to decode only specific parameters, you can pass the only parameter to hashid middleware like this:

Route::get('/users/{user}/posts/{post}/comments/{comment}', function(User $user, Post $post, Comment $comment) {
 return func_get_args();
})->middleware('hashid:only=user');

About

Helps you to have more secure URLs.

Topics

Resources

License

Stars

Watchers

Forks

Languages

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /