mralirezaeb / hashids-bundle
Integrates hashids/hashids in a Symfony project
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
pkg:composer/mralirezaeb/hashids-bundle
Requires
- php: >=7.1
 - hashids/hashids: ^4.1
 - sensio/framework-extra-bundle: >=5.1
 - symfony/http-kernel: ^4.0 || ^5.0
 
Requires (Dev)
- bossa/phpspec2-expect: ^3.0
 - phpspec/phpspec: ^4.3
 - roave/security-advisories: dev-master
 - twig/twig: ^2.7
 
Suggests
- twig/twig: Allows to use hashids in Twig template engine
 
This package is auto-updated.
Last update: 2025-10-05 22:13:36 UTC
README
HashidsBundle
Integrates hashids/hashids in a Symfony project.
Installation using composer
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:
Using Symfony Flex
    composer config extra.symfony.allow-contrib true
    composer req roukmoute/hashids-bundle
Using Symfony 4 Framework
    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], ];
Configuration
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
Usage
$hashids = $this->get('hashids');
Next it's the same things of official documentation.
Other Features
The Roukmoute\HashidsBundle\Hashids has extra features:
$minHashLength = 42; // Edit the minimum hash length. $this->get('hashids')->setMinHashLength($minHashLength)->encode(1, 2, 3); // Encode with a custom minimum hash length. $this->get('hashids')->encodeWithCustomHashLength($minHashLength, 1, 2, 3);
Hashids Converter
Converter Name: hashids.converter
The hashids converter attempts to convert hashid/id attribute set in the route into an integer parameter.
You could use hashid or id to add :
/** * @Route("/users/{hashid}") */ public function getAction(int $user) { }
or
/** * @Route("/users/{id}") */ public function getAction(int $user) { }
For specific case, just add "hashid" = "{parameter_name}" in ParamConverter
options:
/** * @Route("/users/{slug}") * * @ParamConverter("user", class="RoukmouteBundle\Entity\User", options={"hashid" = "user"}) */ public function getAction(int $user) { }
You could have several hashids one the same URL:
/** * @Route("/users/{user}/status/{status}") * * @ParamConverter("user", class="RoukmouteBundle\Entity\User", options={"hashid" = "user"}) * @ParamConverter("status", class="RoukmouteBundle\Entity\Notification", options={"hashid" = "status"}) */ public function getAction(int $user, int $status) { }
Using Passthrough
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 ParamConverter you would have created.
Twig Extension
Usage
{{ path('users.show', {'hashid': user.id | hashids_encode }) }}
{{ app.request.query.get('hashid') | hashids_decode }}