1. Go to this page and download the library: Download mmghv/dependency-pocket library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
mmghv / dependency-pocket example snippets
use mmghv\DependencyPocket;
// ...
$this->pocket = new DependencyPocket();
$this->pocket->define([
'dep1', // allow any type
'dep2' => 'string', // primitive type
'dep3' => 'array', // primitive type
'dep4' => 'App\Model\Article' // class or interface
]);
$dep = $this->pocket->get('myDep');
// or
$dep = $this->pocket->myDep;
public function __get($name)
{
if ($this->pocket->has($name)) {
return $this->pocket->get($name);
} else {
throw new \Exception("Undefined property: [$name]");
}
}
// Manager.php
namespace App\Managers;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use mmghv\DependencyPocket;
class Manager
{
protected $pocket;
/**
* Define class dependencies.
*/
protected function defineDependencies()
{
if ($this->pocket) {
return true;
}
$this->pocket = new DependencyPocket();
$this->pocket->define([
'app' => 'Laravel\Lumen\Application',
'model' => 'Illuminate\Database\Eloquent\Model',
'validator' => 'Illuminate\Contracts\Validation\Factory',
'request' => 'Illuminate\Http\Request',
'redirectUrl' => 'string',
]);
}
/**
* Create new manager.
*
* @param Application $app
* @param Model $model
* @param array $dependencyPocket
*/
public function __construct(Application $app, Model $model, array $dependencyPocket = [])
{
$this->defineDependencies();
$this->pocket->set($dependencyPocket += [
'app' => $app,
'model' => $model,
'validator' => $app->make('validator'), // default value
'request' => $app->make('request'), // default value
'redirectUrl' => $app->make('session')->previousUrl(), // default value
]);
}
}
// ArticleManager.php
namespace App\Managers;
use Illuminate\Contracts\Foundation\Application;
use App\Models\Article;
class ArticleManager extends Manager
{
/**
* Define any additional class dependencies, Declare this function
* only when you need to define new dependencies.
*/
protected function defineDependencies()
{
if (parent::defineDependencies()) {
return true;
}
$this->pocket->define([
// define any new dependencies for this class
]);
}
/**
* Create new article-manager.
*
* @param Application $app
* @param array $dependencyPocket
*/
public function __construct(Application $app, array $dependencyPocket = [])
{
// always call this first
$this->defineDependencies();
// default value for $model dependency
$model = new Article();
// call parent construct and pass dependencies
parent::__construct($app, $model, $dependencyPocket += [
'validator' => new CustomValidator(), // replace default dependency value
// add any new dependencies for this calss, needs to be defined first in 'defineDependencies()'
]);
}
}