PHP code example of jdikasa / laravel-repository-pattern

1. Go to this page and download the library: Download jdikasa/laravel-repository-pattern 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/ */

    

jdikasa / laravel-repository-pattern example snippets


// config/repository-pattern.php
return [

    /**
     * Namespaces personnalisés
     */
    'namespaces' => [
        'repository' => 'App\\Repositories',
        'service' => 'App\\Services',
        'transformer' => 'App\\Transformers',
        'controller' => 'App\\Http\\Controllers',
        'request' => 'App\\Http\\Requests',
    ],

    /**
     * Répertoires de génération
     * 
     * Ces repertoires doivent correspondre à vos namespaces personnalisés
     */
    'paths' => [
        'repository' => 'app/Repositories',
        'service' => 'app/Services',
        'transformer' => 'app/Transformers',
        'controller' => 'app/Http/Controllers',
        'request' => 'app/Http/Requests',
    ],

    /**
     * Options de génération
     * 
     * Choisissez quelles classes générer
     * 
     * Les options suivantes peuvent être définies à true ou false
     */
    'generations' => [
        'model' => true,
        'controller' => true,
        'repository' => true,
        'transformer' => true,
        'service' => true,
        'request' => true,
    ],

    /**
     * Templates personnalisés
     *
     * L'option suivante vous permet de définir des paths vers vos stubs personnalisés
     */
    'custom_stubs' => [
        'repository' => 'resources/stubs/repository-pattern/repository.stub',
        'service' => 'resources/stubs/repository-pattern/service.stub',
        'controller' => 'resources/stubs/repository-pattern/controller.stub',
        'transformer' => 'resources/stubs/repository-pattern/transformer.stub',
        'request' => 'resources/stubs/repository-pattern/request.stub',
    ],

    /**
     * Preffixes des classes
     */
    'preffixes' => [
        'repository' => '',
        'service' => '',
        'controller' => '',
        'transformer' => '',
        'request' => [
            'store' => 'Store',
            'update' => 'Update'
        ],
    ],

    /**
     * Suffixes des classes
     */
    'suffixes' => [
        'repository' => 'Repository',
        'service' => 'Service',
        'controller' => 'Controller',
        'transformer' => 'Transformer',
        'request' => 'Request',
    ],
];

// app/Repositories/PostRepository.php
class PostRepository extends BaseRepository
{
    public function model(): string
    {
        return Post::class;
    }
    
    public function getPublishedPosts()
    {
        return $this->model->where('status', 'published')->get();
    }
}

// app/Services/PostService.php
class PostService
{
    public function __construct(
        private PostRepository $postRepository
    ) {}
    
    public function createPost(array $data): Post
    {
        return $this->postRepository->create($data);
    }
}

// app/Http/Controllers/PostController.php
class PostController extends Controller
{
    public function __construct(
        private PostService $postService,
        private PostTransformer $postTransformer
    ) {}
    
    public function store(StorePostRequest $request)
    {
        $post = $this->postService->createPost($request->validated());
        
        return response()->json([
            'data' => $this->postTransformer->transform($post)
        ], 201);
    }
}

app/
├── Models/
│   └── Post.php
├── Repositories/
│   └── PostRepository.php
├── Services/
│   └── PostService.php
├── Http/
│   ├── Controllers/
│   │   └── PostController.php
│   └── Requests/
│       └── Post/
│           ├── StorePostRequest.php
│           └── UpdatePostRequest.php
└── Transformers/
    └── PostTransformer.php
bash
php artisan vendor:publish --tag=repository-pattern-stubs
bash
php artisan vendor:publish --tag=repository-pattern-helpers