hsntngr / laravel-repository

laravel应用的仓储模式

1.0.0 2019-02-26 15:49 UTC

This package is auto-updated.

Last update: 2024-09-27 22:11:23 UTC


README

laravel的简单仓储模式

保持模型和控制器整洁

安装

使用composer安装。

composer require hsntngr/laravel-repository

在config/app.php的providers中添加仓库服务提供者

'providers' => [
    // ...
    Hsntngr\Repository\ServiceProvider::class
];

发布配置文件。

php artisan vendor:publish --provider="Hsntngr\Repository\ServiceProvider::class" --tag="config"

然后调整你的 App\Http\Controllers\Controller 类以在所有控制器中使用仓库管理器。通过仓库管理器,你可以在任何地方实例化任何仓库

// ...
use Hsntngr\Repository\IRepositoryManager;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    protected $rm;

    public function __construct(IRepositoryManager $rm)
    {
        $this->rm = $rm;
    }
}
//Now you can easly instantiate a repository with $this->rm->{repositoryKey}

用法

使用 make:repository Model 命令创建新的仓库。

php artisan make:repository User

// app/Repositories/UserRepository.php

// Also you may define custom alias to retrieve repository. By default it uses lower case model name 

php artisan make:repository PostTranslation --key=translate

示例

# PostController
public function show($id)
{
    $post = $this->rm->post->findPublishedPost($id);
    
    return view("posts.single",compact("post"));
}

如果你想要缓存结果,使用 cache() & repository() 方法

public function show($id)
{
    $post = $this->rm->cache("post:".$id,3*60)
         ->repository("post",function($post) use ($id){
             return $post->findPublishedPost($id);
         });
    // if no minutes defined, it'll cache forever
    return view("posts.single",compact("post"));
}

使用 repository() 助手在控制器外部实例化任何仓库

repository("post")->findPublishedPost($id);

要列出仓库,使用 repository:list 命令

php artisan repository:list

// post           ->  PostRepository
// user           ->  UserRepository
// comment        ->  CommentRepository