Laravel 5 중 contracts 상세 설명

5088 단어 Laravel5contracts
먼저 공식 문서 에서 contracts 에 대한 정 의 를 살 펴 보 겠 습 니 다.
Laravel's Contracts are a set of interfaces that define the core services provided by the framework.
Laravel 의 Contracts 는 프레임 워 크 가 제공 하 는 핵심 서비스 인 터 페 이 스 를 정의 하 는 집합 이라는 뜻 이다.
즉,모든 Contract 는 하나의 인터페이스 로 하나의 프레임 워 크 핵심 서비스 에 대응 하 는 것 이다.
그것 의 의 미 는 무엇 입 니까?홈 페이지 에서 내 놓 은 설명 도 간단 하 다.인 터 페 이 스 를 사용 하 는 것 은 느슨 한 결합 과 간단 함 을 위 한 것 이다.
먼저 큰 이 치 를 따 지지 않 고,먼저 건어물 을 좀 해서,contract 를 어떻게 사용 하 는 지 보 자.
먼저 contracts 인터페이스 목록 을 탐색 하 십시오:

Illuminate\Contracts\Auth\Guard
Illuminate\Contracts\Auth\PasswordBroker
Illuminate\Contracts\Bus\Dispatcher
Illuminate\Contracts\Cache\Repository
Illuminate\Contracts\Cache\Factory
Illuminate\Contracts\Config\Repository
Illuminate\Contracts\Container\Container
Illuminate\Contracts\Cookie\Factory
Illuminate\Contracts\Cookie\QueueingFactory
Illuminate\Contracts\Encryption\Encrypter
Illuminate\Contracts\Routing\Registrar
...너무 많아 서 더 붙 이기 귀찮아 요.홈 페이지 수첩 에 있어 요.Illuminate\Contracts\Routing\Registrar 이 contract 를 가지 고 시범 을 보 여 드 리 겠 습 니 다.
우선,app/providers/AppServiceProvider.php 를 열 고 register 방법 에 주의 하 십시오.

public function register()
{
    $this->app->bind(
        'Illuminate\Contracts\Auth\Registrar',
        'App\Services\Registrar'
    );
}
$this->app 은 Application 대상 이자 용기 대상 입 니 다.$this->app->bid 방법 으로 Illuminate\Contracts\Auth\Registrar 인 터 페 이 스 를 실현 하 는 클래스 App\Services\\Registrar 를 연결 하 였 습 니 다.
Illuminate\Contracts\Auth\Registrar 는 contract 입 니 다.App\서비스\레 지 스 트 라 와 같은 파일 은 app/services/레 지 스 트 라 에 있 습 니 다.php.
이어서 우 리 는 App\Http\Controllers\Auth\AuthController 라 는 컨트롤 러 종 류 를 보 았 는데 가 있 는 것 을 보 았 다.construct 구조 함수:

public function __construct(Guard $auth, Registrar $registrar)
{
    $this->auth = $auth;
    $this->registrar = $registrar;

    $this->middleware('guest', ['except' => 'getLogout']);
}

두 개의 인자 가 있 습 니 다.해당 하 는 네 임 스페이스 는 스 크 립 트 시작 부분 에서 볼 수 있 습 니 다.

use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Auth\Registrar;
이 두 가 지 는 모두 contract 입 니 다.그러나 우 리 는 여기 서 Registrar 를 가지 고 말 했 습 니 다.우 리 는 이 안 은 매개 변수 유형 을 통 해$registrar 의 인터페이스 유형 만 가리 키 고 실제 호출 할 때 실제 적 으로 App\Services\Registrar 라 는 것 을 알 게 되 었 습 니 다.이것 이 바로 주입 에 의존 하 는 특성 입 니 다.Laravel 은 자동 으로 용기 에서 인터페이스 Illuminate\Contracts\Auth\Registrar 의 클래스 나 대상 을 검색 하여 실제 매개 변수 로 구조 함수 에 전달 합 니 다.
전체 사용 절 차 는 사실 두 가지 절차 로 요약 할 수 있다.
용기 에 contract 인 터 페 이 스 를 실현 하 는 대상 을 등록 합 니 다.
구조 함수 매개 변수 유형 은 contract 인터페이스 류 로 지정 되 며 프레임 워 크 는 조건 에 맞 는 대상 을 자동 으로 찾 습 니 다.
그럼 계약 의 좋 은 점 을 말씀 드 리 겠 습 니 다.
소나무 결합
홈 페이지 는 밀 착 결합 이 무엇 인지,Contract 인터페이스 가 왜 느슨 한 결합 을 할 수 있 는 지 예 를 들 어 설명 했다.
먼저 결합 코드 를 살 펴 보 겠 습 니 다.

<?php namespace App\Orders;
class Repository {
    /**
     * The cache.
     */
    protected $cache;
    /**
     * Create a new repository instance.
     *
     * @param  \SomePackage\Cache\Memcached  $cache
     * @return void
     */
    public function __construct(\SomePackage\Cache\Memcached $cache)
    {
        $this->cache = $cache;
    }
    /**
     * Retrieve an Order by ID.
     *
     * @param  int  $id
     * @return Order
     */
    public function find($id)
    {
        if ($this->cache->has($id))
        {
            //
        }
    }
}
구조 함수 에 상세 한 캐 시 구현\Some Package\Cache\Memcached 를 주입 한 것 을 볼 수 있 습 니 다.Redis 를 캐 시 서버 로 바 꾸 거나 api 방법 을 변경 하면 수정 이 필요 합 니 다.항목 이 크 면 수정 해 야 할 부분 이 얼마나 있 는 지 모 릅 니 다.
그렇다면 Contract 인 터 페 이 스 는 어떻게 이 문 제 를 해결 합 니까?코드 를 보십시오:

<?php namespace App\Orders;
use Illuminate\Contracts\Cache\Repository as Cache;
class Repository {
    /**
     * Create a new repository instance.
     *
     * @param  Cache  $cache
     * @return void
     */
    public function __construct(Cache $cache)
    {
        $this->cache = $cache;
    }
}
캐 시 는 우리 가 인 터 페 이 스 를 사 용 했 습 니 다.즉,contract,Illuminate\Contracts\Cache\Repository 입 니 다.인터페이스 일 뿐 뒤에 memcache 인지 redis 인지 신경 쓸 필요 가 없습니다.
단순 성
모든 서비스 가 인터페이스 정 의 를 사용 하면 서비스 에 필요 한 기능 을 간단하게 결정 하고 유지 와 확장 이 쉬 우 며 contract 인 터 페 이 스 는 간결 한 문서 로 읽 기 쉽다.

좋은 웹페이지 즐겨찾기