Integrates hashids/hashids in a Symfony project.
These commands requires you to have Composer installed globally.
Open a command console, enter your project directory and execute the following
commands to download the latest stable version of this bundle:
composer config extra.symfony.allow-contrib true
composer req roukmoute/hashids-bundle
composer require roukmoute/hashids-bundle
If this has not been done automatically, enable the bundle by adding the
following line in the config/bundles.php
file of your project:
<?php
return [
…,
Roukmoute\HashidsBundle\RoukmouteHashidsBundle::class => ['all' => true],
];
The configuration (config/packages/roukmoute_hashids.yaml
) looks as follows :
roukmoute_hashids:
# if set, the hashids will differ from everyone else's
salt: ""
# if set, will generate minimum length for the id
# 0 — meaning hashes will be the shortest possible length
min_hash_length: 0
# if set, will use only characters of alphabet string
alphabet: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
# if set to true, it will continue with the next available param converters
passthrough: false
# if set to true, it tries to convert all arguments passed to the controller
auto_convert: false
use Hashids\HashidsInterface;
public function postShow(HashidsInterface $hashids): Response
{
$hashids->…
}
Next it's the same things of official documentation.
Converter Name: hashids.converter
The hashids converter attempts to convert any attribute set in the route into an integer parameter.
You could use hashid
or id
:
/**
* @Route("/users/{hashid}")
*/
public function getAction(int $user)
{
}
or
/**
* @Route("/users/{id}")
*/
public function getAction(int $user)
{
}
You could have several hashids in the same URL prefixed with _hash_
.
/**
* @Route("/users/{_hash_user}/status/{_hash_status}")
*/
public function getAction(int $user, int $status)
{
}
The keys must be the same as in parameters controller:
/**
* _hash_user _hash_status
* ↕ ↕
* public function getAction(int $user, int $status)
*/
You will receive a LogicException
if a hash could not be decoded correctly.
auto_convert
tries to convert all arguments in controller.
roukmoute_hashids:
auto_convert: true
Base on the example above:
/**
* @Route("/users/{user}/status/{status}")
*/
public function getAction(int $user, int $status)
{
}
It will not be possible to get an exception of type LogicException
from the
bundle if it is activated.
passthrough
allows to continue with the next available param converters.
So if you would like to retrieve an object instead of an integer, just active
passthrough :
roukmoute_hashids:
passthrough: true
Base on the example above:
/**
* @Route("/users/{hashid}")
*/
public function getAction(User $user)
{
}
As you can see, the passthrough feature allows to use DoctrineParamConverter
or any another ParamConverterInterface
you would have created.
{{ path('users.show', {'hashid': user.id | hashids_encode }) }}
{{ app.request.query.get('hashid') | hashids_decode }}