Rumah > pembangunan bahagian belakang > tutorial php > [laravel]如何在laravel中使用Repository Pattern(仓库模式)

[laravel]如何在laravel中使用Repository Pattern(仓库模式)

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-06-23 13:05:11
asal
1088 orang telah melayarinya

Repository 模式主要思想是建立一个数据操作代理层,把controller里的数据操作剥离出来,这样做有几个好处:

  • 把数据处理逻辑分离使得代码更容易维护
  • 数据处理逻辑和业务逻辑分离,可以对这两个代码分别进行测试减少代码重复
  • 降低代码出错的几率
  • 让controller代码的可读性大大提高
  • 建立相应的文件夹

    在 app 文件夹里新建文件夹 Repositories,我们的相关代码都会放到这个文件夹里。然后在这个文件夹里新建一个 Interfaces 文件夹,用来放接口。

    建立一个接口

    在上面的Interfaces目录新建一个文件UserInterface.php

    <?phpnamespace    App\Repositories\Interfaces; interface UserInterface{public function get_user($user_id);} 
    Salin selepas log masuk

    建立一个接口对应的实现

    <?phpnamespace App\Repositories;use App\Entity\User;use  App\Repositories\Interfaces\UserInterface; class UserRepository Implements UserInterface{public function  get_user($user_id){$user = User::find($user_id);return $user;}} 
    Salin selepas log masuk

    这里是接口的实现定义你的业务逻辑

    在ServiceProvider中绑定接口

    打开app/Providers/AppServiceProvider, 在register()加入代码:

    <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider{/** Register any application services.** @return void*/  public function register()  {  $this->app->bind('App\Repositories\Interfaces\UserInterface', 'App\Repositories\UserRepository'    );}} 
    Salin selepas log masuk

    ServiceProvider 是 Laravel IOC 容器实现动态换接口实现的地方,所以我们在这里绑定一下,这样我们在使用的时候,不直接使用接口实现,而是用 ioc 容器解析接口,它会帮你自动找到对应好的实现。 这就意味着,以后需要更换实现,可以在这里更换。

    使用仓库

    <?phpnamespace App\Http\V1_0\Controllers\Auth; use Illuminate\Http\Request;use App\Http\V1_0\Controllers\ApiController;use App\Repositories\Interfaces\UserInterface;  class LoginController extends    ApiController{   public function __construct(UserInterface $User) {  $this->User = $User;} public function qqlogin(Request $request){ $user_id=$request->id;  $user = $this->User->get_user($user_id);}} 
    Salin selepas log masuk

    在这里使用了依赖注入

    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan