Laravel 5 중 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 인 터 페 이 스 는 간결 한 문서 로 읽 기 쉽다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel 5.4 프레임 워 크 는 socialite 를 사용 하여 github 로그 인 을 실현 하 는 방법 입 니 다.본 고 는 Laravel 5.4 프레임 워 크 에서 socialite 를 사용 하여 github 로그 인 을 실현 하 는 방법 을 실례 로 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.