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
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-05-05 20:59:00 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 }}