>백엔드 개발 >PHP 튜토리얼 >Laravel 5.5의 핵심 아키텍처에 대한 자세한 그래픽 설명

Laravel 5.5의 핵심 아키텍처에 대한 자세한 그래픽 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-03-24 15:36:042904검색

이번에는 Laravel 5.5의 핵심 아키텍처에 대한 자세한 그래픽과 텍스트 설명을 가져왔습니다. Laravel 5.5의 핵심 아키텍처를 사용할 때 주의 사항은 무엇입니까?

머리말

이 글은 주로 Laravel 5.5의 핵심 아키텍처에 대한 관련 내용을 소개하고 있으며 참고 및 학습을 위해 공유합니다.

1. 종속성 주입

메소드는 구성요소 이름을 전달하며 프레임워크는 이를 메소드에서 직접 인스턴스화할 수 있습니다

예를 들어 가장 일반적으로 사용되는 요청 객체

2. 서비스 컨테이너

사실 Laravel의 핵심은 IoC 컨테이너입니다. 자체적으로는 매우 가볍고 마술적이거나 실질적인 응용 기능이 없습니다. Route(라우팅), Eloquent ORM(데이터베이스 ORM 컴포넌트), Request(요청), Response(응답) 등 많은 사람들이 사용하는 다양한 기능 모듈은 실제로는 코어와 관련이 없는 클래스 모듈에서 제공됩니다. . 이러한 클래스의 등록부터 인스턴스화, 최종적으로 사용되는 프로세스는 실제로 Laravel의 서비스 컨테이너의 책임입니다.

서비스 제공자는 크게 등록(registration)과 부트(boot, 초기화) 두 부분으로 나누어집니다.

3 서비스 제공자

컨테이너에서 클래스를 추출하려면 먼저 등록해야 합니다. 이 컨테이너에. Laravel은 이 컨테이너를 서비스 컨테이너라고 부르기 때문에 서비스가 필요하면 먼저 서비스를 컨테이너에 등록하고 바인딩해야 합니다. 그런 다음 서비스를 제공하고 서비스를 컨테이너에 바인딩하는 것이 서비스 공급자입니다.

4. IOC 컨테이너에 자신만의 클래스를 추가합니다

4.1. 새로운 유효성 검사 클래스를 생성합니다

4.2.

4.3. Provider

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ValidateProvider extends ServiceProvider
{
 /**
 * Bootstrap the application services.
 *
 * @return void
 */
 public function boot()
 {
 //
 }
 /**
 * Register the application services.
 *
 * @return void
 */
 public function register()
 {
 $this->app->bind('valicate',function(){
  return new Validate();
 });
 }
}

4.4에 대한 클래스 유효성 검사, IOC 컨테이너

4.5에 공급자 추가,

4.6 사용, 성공!

5. Facade

facade는 통합 인터페이스를 제공하는 데 사용됩니다. 예를 들어, redis 또는 memcache 중 어떤 캐시를 사용하든 클라이언트는 캐시::get() 메서드를 사용할 수 있습니다. 값을 얻으려면 redis 또는 memcahe를 사용할지 여부는 서비스 제공자에 바인딩하는 것에 따라 다릅니다. 캐시::get()의 구현은 Facade 메소드 getFacadeAccessor를 상속하고 캐시와 같은 컨테이너에 바인딩한 키 값을 반환하는 것입니다. 그런 다음 Facade 클래스는 php 매직 변수

callstatic()과 다음의 논리를 사용합니다. callstatic은 앞서 언급한 서비스 공급자가 바인딩된 컨테이너에서 구문 분석됩니다. 예를 들어 config/app.php

5.2. 클래스는 하나의 메일러만 반환합니다.

5.3 send 메소드를 호출하면 해당 메소드가 존재하지 않으면 callstatic

magic 메소드

로 들어갑니다.

5.4、这个方法会得到mailer的实例,即app('mailer')

5.5、这个实例便能调用mailer类的send方法

6、契约

Laravel 的契约是一组定义框架提供的核心服务的接口。例如,Illuminate\Contracts\Queue\Queue契约定义了队列任务所需的方法,而Illuminate\Contracts\Mail\Mailer契约定义了发送电子邮件所需的方法。框架对每个契约都提供了相应的实现。

好处是实现了程序的低耦合和简单性。

低耦合#

首先,让我们来看一些高耦合缓存实现的代码。如下:

<?php
namespace App\Orders;
class Repository
{
 /**
 * 缓存实例。
 */
 protected $cache;
 /**
 * 创建一个仓库实例。
 *
 * @param \SomePackage\Cache\Memcached $cache
 * @return void
 */
 public function construct(\SomePackage\Cache\Memcached $cache)
 {
 $this->cache = $cache;
 }
 /**
 * 按照 Id 检索订单
 *
 * @param int $id
 * @return Order
 */
 public function find($id)
 {
 if ($this->cache->has($id)) {
  //
 }
 }
}

这个类中,程序跟给定的缓存实现高耦合。因为我们依赖于一个扩展包的特定缓存类。一旦这个扩展包的 API 被更改了,我们的代码就必须跟着改变。

同样的,如果我们想要将底层的的缓存技术( Memcached )替换为另一种缓存技术( Redis ),那又得再次修改这个repository类。而repository类不应该了解太多关于谁提供了这些数据或是如何提供的等等。

比起上面的做法,我们可以使用一个简单的、与扩展包无关的接口来改进我们的代码:

<?php
namespace App\Orders;
use Illuminate\Contracts\Cache\Repository as Cache;
class Repository
{
 /**
 * 缓存实例。
 */
 protected $cache;
 /**
 * 创建一个仓库实例。
 *
 * @param Cache $cache
 * @return void
 */
 public function construct(Cache $cache)
 {
 $this->cache = $cache;
 }
}

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

php自定义二维数组排序函数array

phpunit接口自动化测试功能的实现

위 내용은 Laravel 5.5의 핵심 아키텍처에 대한 자세한 그래픽 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.