netsells / hash-model-ids
Dynamically create a hash of an Eloquent model id value to avoid exposing a record's actual database id.
Installs: 24 624
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 3
Forks: 0
Open Issues: 0
Requires
- php: ^8.2
- hashids/hashids: ^5.0
- illuminate/contracts: ^10.0|^11.0
- illuminate/database: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
- illuminate/validation: ^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
README
Dynamically create a hash of an Eloquent model id value to avoid exposing a record's actual database id.
Features
use Netsells\HashModelIds\HashesModelIdsTrait; class Model extends BaseModel { use HashesModelIdsTrait; }
Use the HashesModelIdsTrait
in an Eloquent model to enable the following functionality:
- Access a model's hashed id value:
$model->hashed_id
- Filter a model by an array of or a single hashed id:
Model::whereHashedId($hashedId)
Model::whereHashedIds($hashedIds)
- Define routes with models bound by their hashed id:
Route::get('models/{model}', function (Model $model) { return $model; }); $url = url("models/$model->hashed_id");
- Check for model existence in form request classes using a bespoke rule, optionally including additional chained constraints:
public function rules() { return [ 'hashed_id' => [ ExistsWithHashedIdRule::make(Model::class) ->where(function ($query) { $query->where('type', 'test'); }) ->where('foo', 'bar'), ], ]; }
Installation
Install the package with:
composer require netsells/hash-model-ids
Publish the package config file:
php artisan vendor:publish --tag=hash-model-ids-config
Optionally set a HASH_MODEL_IDS_SALT
in .env
.
Translations
Publish the package translations file:
php artisan vendor:publish --tag=hash-model-ids-lang
Development
Sometimes, during development, it can be awkward dealing with hashed ids. Set HASH_MODEL_IDS_ENABLED=false
in your environment file to enable use of a (configurable) prefixed version of a model's actual id rather than the default hashed version.
Testing
./vendor/bin/phpunit