1. Go to this page and download the library: Download michele-angioni/support 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/ */
use MicheleAngioni\Support\Repos\AbstractEloquentRepository;
use Post;
class EloquentPostRepository extends AbstractEloquentRepository implements PostRepositoryInterface
{
protected $model;
public function __construct(Post $model)
{
$this->model = $model;
}
}
use Illuminate\Support\ServiceProvider;
class RepositoryServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(
PostRepositoryInterface::class,
EloquentPostRepository::class
);
}
}
RepositoryServiceProvider::class,
use PostRepositoryInterface as PostRepo;
class PostController extends BaseController
{
private $postRepo;
function __construct(PostRepo $postRepo)
{
$this->postRepo = $postRepo;
}
public function show($idPost)
{
$post = $this->postRepo->find($idPost);
// Use the retrieved post
}
}
interface StaffXMLRepositoryInterface {}
use MicheleAngioni\Support\Repos\AbstractSimpleXMLRepository;
class SimpleXMLStaffRepository extends AbstractSimpleXMLRepository implements StaffXMLRepositoryInterface
{
protected $autoload = false;
protected $xmlPath = '/assets/xml/staff.xml';
}
use Illuminate\Support\ServiceProvider;
class XMLRepositoryServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(
'StaffXMLRepositoryInterface',
'SimpleXMLStaffRepository'
);
}
}
use MicheleAngioni\Support\Cache\CacheInterface;
use MicheleAngioni\Support\Cache\KeyManager;
use MicheleAngioni\Support\Cache\AbstractCacheRepositoryDecorator;
use MicheleAngioni\Support\Repos\RepositoryCacheableQueriesInterface;
class CachePostRepoDecorator extends AbstractCacheRepositoryDecorator implements PostRepositoryInterface
{
/**
* Section of the Cache the repo belongs to.
*
* @var string
*/
protected $section = 'Forum';
/**
* Construct
*
* @param RepositoryCacheableQueriesInterface $repo
* @param CacheInterface $cache
* @param KeyManager $keyManager
*/
public function __construct(RepositoryCacheableQueriesInterface $repo, CacheInterface $cache, KeyManager $keyManager)
{
parent::__construct($repo, $cache, $keyManager);
}
}
use Illuminate\Support\ServiceProvider;
use MicheleAngioni\Support\Cache\KeyManager;
use MicheleAngioni\Support\Cache\LaravelCache;
class RepositoryServiceProvider extends ServiceProvider {
public function register()
{
$this->app->bind(
'PostRepositoryInterface', function($app)
{
$repo = $app->make('EloquentPostRepository');
return new CachePostRepoDecorator($repo, new LaravelCache($app['cache']), new KeyManager);
}
);
}
}
public function flush()
{
Cache::tags(get_called_class().'id'.$this->{$this->primaryKey})->flush();
}
use MicheleAngioni\Support\Cache\CacheInterface;
use MicheleAngioni\Support\Cache\AbstractCacheSimpleXMLRepositoryDecorator;
use MicheleAngioni\Support\Repos\XMLRepositoryInterface;
use StaffXMLRepositoryInterface;
class CacheSimpleXMLStaffRepoDecorator extends AbstractCacheSimpleXMLRepositoryDecorator implements StaffXMLRepositoryInterface {
/**
* Section of the Cache the repo belongs to.
*
* @var string
*/
protected $section = 'Forum';
/**
* Construct
*
* @param XMLRepositoryInterface $repo
* @param CacheInterface $cache
*/
public function __construct(XMLRepositoryInterface $repo, CacheInterface $cache)
{
parent::__construct($repo, $cache);
}
}
use Illuminate\Support\ServiceProvider;
use CacheSimpleXMLStaffRepoDecorator;
use MicheleAngioni\Support\Cache\LaravelCache;
class XMLRepositoryServiceProvider extends ServiceProvider {
public function register()
{
$this->app->bind(
'StaffXMLRepositoryInterface', function($app)
{
$repo = $app->make('SimpleXMLStaffRepository');
return new CacheSimpleXMLStaffRepoDecorator($repo, new LaravelCache($app['cache'])
);
});
}
}
use MicheleAngioni\Support\Presenters\AbstractPresenter;
use MicheleAngioni\Support\Presenters\PresentableInterface;
class PostPresenter extends AbstractPresenter implements PresentableInterface
{
public function text()
{
return e($this->object->text);
}
public function capitalText()
{
return e(strtoupper($this->object->text));
}
}
use MicheleAngioni\Support\Presenters\Presenter;
use PostRepositoryInterface as PostRepo;
class PostController extends BaseController {
private $postRepo;
private $presenter;
function __construct(PostRepo $postRepo, Presenter $presenter)
{
$this->postRepo = $postRepo;
$this->presenter = $presenter;
}
public function index()
{
$posts = $this->postRepo->all();
// Pass the post collection to the presenter
$posts = $this->presenter->collection($posts, new PostPresenter());
// Pass the post collection to the view
return View::make('forum')->with('posts', $posts);
}
public function show($idPost)
{
$post = $this->postRepo->find($idPost);
// Pass the post to the presenter
$post = $this->presenter->model($post, new PostPresenter());
// Pass the post to the view
return View::make('forum')->with('post', $post);
}
}
use Illuminate\Support\ServiceProvider;
use MicheleAngioni\Support\Cache\KeyManager;
use MicheleAngioni\Support\Cache\LaravelCache;
use MicheleAngioni\Support\Semaphores\SemaphoresManager;
class SemaphoresServiceProviders extends ServiceProvider
{
public function register()
{
$this->app->bind(
'MicheleAngioni\Support\Semaphores\SemaphoresManager', function($app)
{
return new SemaphoresManager(new LaravelCache($app['cache']), new KeyManager);
});
}
}