tungnt/laravel-repository

Create a Repository using Artisan CLI

1.0.4 2022-12-11 17:01 UTC

This package is auto-updated.

Last update: 2025-05-11 21:50:02 UTC


README

Latest Version on Packagist GitHub license

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.