Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/patiencemanzen/deper
Inject multiple classes/dependencies in a specific class and use them as one single resource
https://github.com/patiencemanzen/deper
composer dependency laravel php
Last synced: about 1 month ago
JSON representation
Inject multiple classes/dependencies in a specific class and use them as one single resource
- Host: GitHub
- URL: https://github.com/patiencemanzen/deper
- Owner: patiencemanzen
- Created: 2022-08-24T12:55:03.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2022-08-31T08:44:06.000Z (over 2 years ago)
- Last Synced: 2024-11-20T13:30:13.227Z (about 1 month ago)
- Topics: composer, dependency, laravel, php
- Language: PHP
- Homepage:
- Size: 14.6 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Deper from Patienceman
Deper is a dependency injector, which is able to inject even more than 4 classes in a simple way and is reliable,
So now we are able to use multiple classes functions at once, :100: :fireworks:## Installation
Installing the package doesn't require much requirement except to paste the following command in the laravel terminal, and you're good to go.
```bash
composer require patienceman/deper
```## Usage
It is easy to deal with this package, however, when you start to inject heavy classes, like thousand functions, it will take
a while to find your function, and adds up to API / execution time.
So once the installation is done! you need to create a new class file! for example
```PHP
namespace App\Dependencies;use Patienceman\Deper\Dependencies;
class PatientDependencies extends Dependencies {
/**
* Class constructor.
*/
public function __construct() {
return $this->boot();
}/**
* Resources to be injected
*
* @return array
*/
public function injections(): array {
return [
\App\Services\Mood::class, // or new Mood()
\App\Services\Energy::class, // or new Energy()
\App\Actions\Move::class // or new Move()
];
}
}
```
You can apply even to many classes to be injected, Just put it inside the injection return array.
So now on let's use our dependencies anywhere we want!
```PHP
namespace App\Http\Controllers;use App\Dependencies\PatientDependencies;
use Illuminate\Http\Request;class TestController extends Controller {
/**
* Store a newly created resource in storage.
*
* @param PatientDependencies $dependency
* @return \Illuminate\Http\Response
*/
public function store(PatientDependencies $dependency) {
return $dependency->mood(); // or $dependency->energy();
}
}
```
Woow :smile: :star: :star2: , that amazing step forward we made!
See!, easy-peasy!## class inheritance
So now that was the easy step to use!, let see how the inheritance work for dependencies!, Note: we will use the above example
```PHP
namespace App\Services;use App\Dependencies\PatientDependencies;
class Human extends PatientDependencies {
/**
* Class constructor.
*/
public function __construct() {
parent::__construct();
}/**
* Possess a new spirit
*
* @return string
*/
public function Spirit () {
$this->mood();
$this->energy();
return "spirit created and possessed successfully";
}
}
```
That was awesome right? :+1: :call_me_hand: :ambulance:## Let use trait
So now on let's use traits to make it easier, Note: with current example
```PHP
namespace App\Services;use Patienceman\Deper\Injectable;
class Human {
use Injectable;protected $dependencies = [
\App\Services\Mood::class, // or new Mood()
\App\Services\Energy::class, // or new Energy()
\App\Actions\Move::class // or new Move()
];/**
* Class constructor.
*/
public function __construct() {
$this->inject($this->dependencies);
}/**
* Possess a new spirit
*
* @return string
*/
public function Spirit () {
$this->mood();
$this->energy();
return "spirit created and possessed successfully";
}
}
```
This is so amazing! :100: :smile:## Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.## License
[MIT](https://choosealicense.com/licenses/mit/)