Stars: 400
Forks: 35
Pull Requests: 19
Issues: 11
Watchers: 8
Last Updated: 2023-05-16 11:00:42
Obfuscate your data by generating reversible, non-sequential, URL-safe identifiers.
License: MIT License
Languages: PHP
Laravel Hashid provides a unified API across various drivers such as Base62, Base64, Hashids and Optimus, with support for multiple connections or different encoding options. It offers a simple, elegant way to obfuscate your data by generating reversible, non-sequential, URL-safe identifiers.
You can install this package using the Composer manager:
$ composer require elfsundae/laravel-hashidFor Lumen or earlier Laravel than v5.5, you need to register the service provider manually:
ElfSundae\Laravel\Hashid\HashidServiceProvider::classThen publish the configuration file:
# For Laravel application:
$ php artisan vendor:publish --tag=hashid
# For Lumen application:
$ cp vendor/elfsundae/laravel-hashid/config/hashid.php config/hashid.phpOur well documented configuration file is extremely similar to the configurations of numerous Laravel manager integrations such as Database, Queue, Cache and Filesystem. So you do not need to spend extra time to learn how to configure Hashid.
Additionally, for simplicity you do not need to add singleton drivers like Base64 to your config file as they have no encoding options, unless you would like to specify a meaningful connection name.
Let's see an example of the configuration:
'default' => 'id',
'connections' => [
'basic' => [
'driver' => 'base64',
],
'hashids' => [
'driver' => 'hashids',
'salt' => 'sweet girl',
],
'id' => [
'driver' => 'hashids_integer',
'salt' => 'My Application',
'min_length' => 6,
'alphabet' => '1234567890abcdef',
],
'base62' => [
'driver' => 'base62',
'characters' => 'f9FkqDbzmn0QRru7PBVeGl5pU28LgIvYwSydK41sCO3htaicjZoWAJNxH6EMTX',
],
],The hashid() helper or the Hashid facade may be used to interact with any of your configured connections or drivers:
use ElfSundae\Laravel\Hashid\Facades\Hashid;
// Obtain the default connection instance
hashid();
Hashid::connection();
// Obtain the "base62" connection instance
hashid('base62');
Hashid::connection('base62');
// Obtain the Base64 driver instance
hashid('base64');
Hashid::connection('base64');
Hashid::driver('base64');There are only two methods you need to know to use any connection or driver:
encode($data) for encoding data.decode($data) for decoding data.hashid()->encode(123456);
hashid('base64')->decode('TGFyYXZlbA');
Hashid::encode(123456);
Hashid::connection('hashids')->decode('X68fkp');And there are also two corresponding helper functions:
hashid_encode($data, $name = null)hashid_decode($data, $name = null)hashid_encode(123456);
hashid_decode('TGFyYXZlbA', 'base64');base62 , base62_integercharacters : 62 unique characterstuupola/base62hashid:alphabet command to generate random characters.base64 , base64_integerelfsundae/urlsafe-base64hashids , hashids_hex , hashids_integer , hashids_stringsaltmin_lengthalphabet : At least 16 unique charactershashids/hashidshashid:alphabet command to generate a random alphabet.hex , hex_integeroptimusprime : Large prime number lower than 2147483647inverse : The inverse prime so that (PRIME * INVERSE) & MAXID == 1random : A large random integer lower than 2147483647jenssegers/optimushashid:optimus command to generate needed numbers.2147483647.To create a custom Hashid driver, you only need to implement the ElfSundae\Laravel\Hashid\DriverInterface interface that contains two methods: encode and decode. The constructor can optionally receive the driver configuration from a $config argument, and type-hinted dependencies injection is supported as well:
<?php
namespace App\Hashid;
use ElfSundae\Laravel\Hashid\DriverInterface;
use Illuminate\Contracts\Encryption\Encrypter;
class CustomDriver implements DriverInterface
{
protected $encrypter;
protected $serialize;
public function __construct(Encrypter $encrypter, array $config = [])
{
$this->encrypter = $encrypter;
$this->serialize = $config['serialize'] ?? false;
}
public function encode($data)
{
return $this->encrypter->encrypt($data, $this->serialize);
}
public function decode($data)
{
return $this->encrypter->decrypt($data, $this->serialize);
}
}Now you can configure the connection with this driver:
'connections' => [
'custom' => [
'driver' => App\Hashid\CustomDriver::class,
'serialize' => false,
],
// ...
]If you prefer a short name for your driver, just register a container binding with hashid.driver. prefix:
$this->app->bind('hashid.driver.custom', CustomDriver::class);$ composer testThis package is open-sourced software licensed under the MIT License.