>  기사  >  백엔드 개발  >  Laravel5 소스코드 분석(1)

Laravel5 소스코드 분석(1)

WBOY
WBOY원래의
2016-08-08 09:25:151097검색

Laravel5 소스 코드 분석

autoload.php는 작곡가의 자동 로드를 사용합니다

여기서는 설명하지 않겠습니다

app.php는 전체 프로젝트를 시작합니다

Application 클래스 먼저 살펴보기

class Application extends Container implements ApplicationContract, HttpKernelInterface
ArrayAccess를 구현하는 컨테이너에는 많은 메소드가 있습니다. 기본 메소드는 객체를 바인딩하는 데 사용됩니다(재사용을 용이하게 함).
ApplicationContract는 등록 서비스 제공자를 구현해야 합니다.
HttpKernelInterface는 요청을 수락하고 응답을 반환하는 핸들 메서드입니다.

애플리케이션 구성 방법

  • registerBaseBindings()
    앱 개체 자체를 인스턴스 속성 배열에 바인딩합니다.

  • registerBaseServiceProviders()
    두 개의 서비스 제공자를 등록합니다. 하나는 EventServiceProvider이고, 'events'(TODO)라는 단일 Dispatcher를 등록하고, 다른 하나는 Router, RouterGenerator, Redirector, ResponseFactory를 포함하는 RoutingServiceProvider()이며, 두 개의 매개변수를 허용하도록 ResponseFactory를 구성합니다. 하나는 ViewFactory입니다. 하나는 Redirecter

  • registerCoreContainerAliases()입니다. 이는 일련의 키와 해당 클래스 이름 및 인터페이스 이름을 별칭 특성 배열
    'app' => ['IlluminateFoundationApplication', 'IlluminateContractsContainerContainer', 'IlluminateContractsFoundationApplication']
    에 추가합니다. 'app'이 핵심이고 배열의 세 개는 별칭입니다(추측: app?>make( llum inate재단신청),모두하겠습니다반품답글app['app'])

앱을 구성한 후 중요한 인스턴스 생성을 시작하세요.

  1. AppHttpKernel 싱글톤을 다음에서 공유하세요. 앱 컨테이너 .
    이 클래스를 살펴보세요. IlluminateFoundationHttpKernel을 상속하고 bootstrap, handler, 종료 및 getApplication의 네 가지 메소드를 구현합니다. 요청이 수신되면 프로세스는 처음 세 가지를 순서대로 실행합니다. 이는 매우 단순화되었습니다.
    protected $bootstrappers 배열에는 일련의 부트스트랩 시작 항목이 포함되어 있습니다.
    그의 __construct는 애플리케이션과 라우터라는 두 개의 매개변수를 허용합니다. $app->singleton가 어떻게 초기화하는지 다시 한 번 살펴봐야 합니다. 이미 IoC 기능이 포함되어 있나요? (할 일)
    여기서는 이 두 매개변수가 올바르게 전달되었다고 가정합니다. 그런 다음 protected $routeMiddleware에서 라우터에 대한 미들웨어 메소드를 즉시 호출하십시오. 미들웨어 메소드는 라우터의 미들웨어 속성 배열에 키와 클래스 이름을 추가합니다.

  2. 앱 컨테이너에서 AppConsoleKernel 싱글톤을 공유합니다.
    IlluminateFoundationConsoleKernal에서 상속되었습니다. 생성자는 app, 하나satcher이벤트. 그리고 일정 간격으로 작업을 실행하도록 스케줄러가 설정됩니다. protected $command의 속성과 protected function schedule 메소드는 모두 재정의에 사용됩니다.

  3. 在app容器中共享一个App\Exceptions\Handler单例。
    继承自Illuminate\Foundation\Exceptions\Handler。他的构造方法接受一格Psr\Log\LoggerInterface

至此,app算是构造完成。接下来就要调用他的方法了。

调用Application

kernel=app->make(‘Illuminate\Contracts\Http\Kernel’);

response=kernel->handle(
$request = Illuminate\Http\Request::capture()
);

$response->send();

kernel?>terminate(request, $response);

这里的代码非常明确,首先make一个Kernal,之前已经将其绑定为singleton了。然后kernal handle一个request, 得到一个response, response调用send方法,最后kernal terminate。这里只是一个高纬度的概括,具体其中实现的方法,还需要进一步深入。

看到这里,我的感觉是,整个项目最重要的部分就是$app这个容器,或者说Container这个类,绑定的是什么(Closure),有哪些绑定方法,各个方法的作用是什么,make 和 build有什么区别,alias的作用是什么,等。了解了这些,对写框架会有帮助。

以上就介绍了Laravel5 源码解析 (一),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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