PSR-15/PSR-7 compliant middleware using ivanakimov/hashids.php
You can install the expressive-hashids-middleware library with composer:
$ composer require icanhazstring/expressive-hashids-middleware
The main purpose of the middleware is to obfuscate internal IDs from the outside world. That said, you don't have to change your internal id handling (like autoincrement in your db) to use this middleware.
Any incoming request in the form of /api/resource/{id}
will be decoded using this middleware.
So for example (default configuration):
/api/user/ABC
(where ABC
is the encoded value) will produce request attributes like this:
$attributes = $request->getAttributes();
/*
[
'id' => 'ABC',
'__hashids_identifier' => 1
]
*/
The middleware won't override attributes! You can use the
HashidsMiddleware::ATTRIBUTE
constant to easy access this attribute.
Include the HashidsConfigProvider
inside your config/config.php
:
$aggregator = new ConfigAggregator([
...
\icanhazstring\Hashids\HashidsConfigProvider::class,
...
]);
Make sure the HashidsConfigProvider
is included before your autoload files!
If you want to change parameters of Hashids
, simply provide the
HashidsConfigProvider::CONFIG_KEY
inside your autoload configuration and change the values to your desire.
return [
\icanhazstring\Hashids\HashidsConfigProvider::CONFIG_KEY => [
'salt' => '',
'minHashLength' => 0,
'alphabet' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',
'resource_identifiert' => 'id'
]
];
If you want, you can use the hydration/extraction strategy provided to decode/encode data from and into your objects.
To use the strategy, simply use the provided delegator HashidsHydratorDelegatorFactory
and append
it as delegator for your hydrator.
class ConfigProvider
{
public function __invoke(): array
{
return [
'hydrators' => [
'delegators' => [
ArraySerializable::class => [
\icanhazstring\Hashids\Hydrator\HashidsHydratorDelegatorFactory:class
]
]
],
];
}
}