https://github.com/soyhuce/laravel-model-injection
Extended Model injection for Laravel
https://github.com/soyhuce/laravel-model-injection
hacktoberfest injection laravel
Last synced: 3 months ago
JSON representation
Extended Model injection for Laravel
- Host: GitHub
- URL: https://github.com/soyhuce/laravel-model-injection
- Owner: Soyhuce
- License: mit
- Created: 2022-03-03T10:32:35.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-02-24T08:53:56.000Z (4 months ago)
- Last Synced: 2025-04-14T10:13:52.791Z (3 months ago)
- Topics: hacktoberfest, injection, laravel
- Language: PHP
- Homepage:
- Size: 59.6 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: .github/CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
- Security: .github/SECURITY.md
Awesome Lists containing this project
README
# Extended Model injection for Laravel
[](https://packagist.org/packages/soyhuce/laravel-model-injection)
[](https://github.com/soyhuce/laravel-model-injection/actions?query=workflow%3Arun-tests+branch%3Amain)
[](https://github.com/soyhuce/laravel-model-injection/actions?query=workflow%3A"Fix+PHP+code+style+issues"+branch%3Amain)
[](https://github.com/soyhuce/laravel-model-injection/actions?query=workflow%3APHPStan+branch%3Amain)
[](https://packagist.org/packages/soyhuce/laravel-model-injection)Want to control have better control of model injection ? Need to validate the data before querying the database ?
Here is a package that allows you to do that.
## Installation
You can install the package via composer:
```bash
composer require soyhuce/laravel-model-injection
```## Usage
### Implicit binding
To validate the url parameter used to inject the model in the controller, you can use
the `Soyhuce\ModelInjection\ValidatesImplicitBindings` trait in it.You will have then to implement the method `public function routeBindingRules(): array`
which will define, for each key on which the model will be bound, the rules to validate the url parameter.```php
use Soyhuce\ModelInjection\ValidatesImplicitBinding;class Post extends Model
{
use ValidatesImplicitBinding;
/**
* @return array
*/
public function routeBindingRules(): array
{
return [
'id' => 'integer',
'slug' => ['string', 'min:5']
];
}
}
```This will allow you to validate the parameter to bind the `Post` in the routes using:
```php
Route::get('posts/{post}', function(Post $post) {
//...
});Route::get('posts-by-slug/{post:slug}', function(Post $post) {
//...
});
```If the parameter is not valid, a 404 error will be returned.
```
GET /posts/foo => 404
GET /posts-by-slug/bar => 404
```See [https://laravel.com/docs/routing#implicit-binding](https://laravel.com/docs/routing#implicit-binding)
#### Customize implicit route binding error
You can customize the way this package will handle validation failure for implicit bindings.
In a Service provider, just call `InvalidRouteBinding::handleUsing` :
```php
InvalidRouteBinding::handleUsing(function (string $class, string $field): never {
Log::error("Invalid binding for $class on $field.");abort(422);
});
```### Explicit bindings
You can explicitly bind your models using `\Soyhuce\ModelInjection\BindModels` trait in a service
provider (`RouteServiceProvider` for exemple).```php
use Soyhuce\ModelInjection\BindModels;class RouteServiceProvider extends ServiceProvider {
use BindModels;
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot() {
parent::boot();$this->bindModel('user', User::class, 'integer'); // Validates that the parameter is an integer
// You can bind a model explicitly on a given column
$this->bindModelOn('post', Post::class, ['string', 'min:5'], 'slug');
}
}```
If the given parameter is not valid, a 404 error will be returned.
## Testing
```bash
composer test
```## Changelog
Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.
## Contributing
Please see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.
## Security Vulnerabilities
Please review [our security policy](../../security/policy) on how to report security vulnerabilities.
## Credits
- [Bastien Philippe](https://github.com/bastien-phi)
- [All Contributors](../../contributors)## License
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.