tungnt / laravel-repository
Create a Repository using Artisan CLI
README
Repository setup inspired by the theanik/laravel-more-command package. This package is an extended, adjusted (but entirely independent) version of that, with its own interfaces.
Install
Via Composer
composer require tungnt/laravel-repository --dev
Or add the following to your composer.json's require-dev section and composer update
"require-dev": { "tungnt/laravel-repository": "^1.0.4" }
Publish Package Configuration
php artisan vendor:publish --provider="Tungnt\LaravelRepository\RepositoryServiceProvider" --tag="tungnt/config" --tag="tungnt/Repositories"
To Change Default Namespace [config/repository.php]
<?php return [ 'repository-namespace' => 'App', // Your Desire Namespace for Repository Classes 'service-namespace' => 'App', // Your Desire Namespace for Service Classes ]
Basic Usage
Create a repository Class.
php artisan make:repository your-repository-name
Example:
php artisan make:repository UserRepository
or
php artisan make:repository User
Create a repository Class in the directory.
php artisan make:repository folder/your-repository-name
Example:
php artisan make:repository User/UserRepository
or
php artisan make:repository User/User
The above will create a Repositories directory inside the App directory.\
Create a repository with Interface.
php artisan make:repository UserRepository -i
or
php artisan make:repository User/UserRepository -i
Here you need to put extra -i
flag.
The above will create a Repositories directory inside the App directory.
Create repository with Model.
php artisan make:repository UserRepository -m
or
php artisan make:repository User/UserRepository -m
Here you need to put extra -m
flag.
Or you can create repository with Model and Interface:
php artisan make:repository User/UserRepository -mi
Create repository resource.
php artisan make:repository UserRepository --resource
An Example of created repository class:
File repository
<?php namespace App\Repositories; use App\Repositories\BaseRepository; use App\Repositories\Interfaces\UserRepositoryInterface; class UserRepository extends BaseRepository implements UserRepositoryInterface { public function getModel() { return \App\Models\User::class; } public function getUser() { return []; } }
File Interface
<?php namespace App\Repositories\Interfaces; use App\Repositories\Interfaces\RepositoryInterface; interface UserRepositoryInterface extends RepositoryInterface { public function getUser(); }
File Controller
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Repositories\Interfaces\UserRepositoryInterface; class UserController extends Controller { /** * @var UserRepositoryInterface|\App\Repositories\Repository */ protected $userRepo; public function __construct(UserRepositoryInterface $user) { $this->userRepo = $user; } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $user = $this->userRepo->getAll(); return view('', ['user' => $user]); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $data = $request->all(); //... Validation here $user = $this->userRepo->create($data); return redirect()->route(''); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { $user = $this->userRepo->find($id); return view('', ['user' => $user]); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { $data = $request->all(); //... Validation here $user = $this->userRepo->update($id, $data); return redirect()->route(''); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { $this->userRepo->delete($id); return redirect()->route(''); } }
Make Service
You can create a new Service class by artisan cli
php artisan make:service your-service
or
php artisan make:service your-service -i
License
The MIT License (MIT). Please see License for more information.