PHP code example of freevital / laravel-repository
1. Go to this page and download the library: Download freevital/laravel-repository 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/ */
freevital / laravel-repository example snippets
namespace App\Repositories\Eloquent;
use Freevital\Repository\Eloquent\BaseRepository;
class PostRepository extends BaseRepository
{
/**
* Specify Model class name.
*
* @return string
*/
public function model()
{
return "App\Post";
}
}
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Repositories\Criteria\BySlugCriteria;
use App\Repositories\Criteria\WithCommentsCriteria;
use App\Repositories\Eloquent\PostRepository;
class PostController extends Controller
{
/**
* @var PostRepository
*/
protected $postRepository;
/**
* @param PostRepository $postRepository
*/
public function __construct(PostRepository $postRepository)
{
$this->postRepository = $postRepository;
}
/**
* Get all posts.
*
* @return \Illuminate\Http\JsonResponse
*/
public function index()
{
$posts = $this->postRepository->all();
return \Response::json(compact('posts'));
}
}
namespace App\Repositories\Criteria;
use Illuminate\Database\Eloquent\Builder;
use Freevital\Repository\Contracts\CriteriaContract;
use Freevital\Repository\Contracts\RepositoryContract;
class BySlugCriteria implements CriteriaContract
{
/**
* @var string
*/
protected $slug;
/**
* @param string $slug
*/
public function __construct($slug)
{
$this->slug = $slug;
}
/**
* Apply criteria in query repository.
*
* @param Builder $query
* @param RepositoryContract $repository
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function apply(Builder $query, RepositoryContract $repository)
{
return $query->where('slug', $this->slug);
}
}
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Repositories\Criteria\BySlugCriteria;
use App\Repositories\Criteria\WithCommentsCriteria;
use App\Repositories\Eloquent\PostRepository;
class PostController extends Controller
{
/**
* Get a post by slug.
*
* @param string $slug
*
* @return \Illuminate\Http\JsonResponse
*/
public function show($slug)
{
$post = $this->postRepository
->pushCriteria(new WithCommentsCriteria())
->pushCriteria(new BySlugCriteria($slug))
->first();
return \Response::json(compact('post'));
}
}
namespace App\Providers;
use Freevital\Repository\Criteria\ActiveCriteria;
use Freevital\Repository\Eloquent\BaseRepository;
use Illuminate\Support\ServiceProvider;
class RepositoryMacroServiceProvider extends ServiceProvider
{
/**
* Register the application's repository macros.
*
* @return void
*/
public function boot()
{
BaseRepository::macro('active', function (BaseRepository $repository) {
$repository->pushCriteria(new ActiveCriteria());
});
}
}