2017-02-15 18 views
2

내가 사용 Laravel에서 컨트롤러를 만든 use 다음'use'는 파일 검색을 시작할 위치를 어떻게 알 수 있습니까?

use Illuminate\Http\Request; 

어떻게 컨트롤러는 어디 Request를 찾을 알고 있나요? 컨트롤러 자체에 있습니다

app\Http\Controllers\LoginController.php 

그러나 요청에 있습니다

use Illuminate\Http\Request; 

...하지 :

vendor\laravel\framework\src\Illuminate\Http\Request.php 


그래서 왜 use입니다 :

use vendor\laravel\framework\src\Illuminate\Http\Request; 

이것도 작동할까요? 컨트롤러가 검색을 시작할 위치를 어떻게 알 수 있습니까?

+2

'use'는 파일이 아닌 클래스를 참조하기 때문에 파일을 어디서 찾을 지 모릅니다. 잘만되면 오토로더는 그 클래스의 파일을 어디에서 찾을 수 있는지 알고 있습니다. –

+0

여러 오토로더가있는 것 같습니다. 어떻게 올바른지 알 수 있습니까? – Black

+0

자동 로딩을 위해 작곡가를 사용한다면,'vendor/composer' 디렉토리를 점검하여 오토로더를 읽으십시오. – Progrock

답변

2

귀하의 응용 프로그램이 클래스 파일에있는 namespace 선언에 의해 PHP에 이미 제공된 정보를 기반으로하며, 일반적으로 오토로더를 통해 제공됩니다. 기본적으로 클래스는 찾을 수 없습니다.

그것은 그 수 :

  • 가 수동으로 파일을 포함 시켰습니다 당신 때문에 신속 첫 번째 옵션이 관리하기 어려운 얻을 것이다 작은 프로젝트를 제외하고는 자동 로더

를 사용하는

  • 두 번째 옵션을 탐구하는 것이 더 나을 것입니다. @ Koala Yeung은 PSR-0과 PSR-4에 대해 언급 했으므로이를 위해 일반적으로 인정 된 방법입니다.

    오토로더를 spl_autoload_register (http://php.net/manual/en/function.spl-autoload-register.php)으로 등록하면 새 개체를 만들 때마다 호출되는 함수를 작성할 수 있습니다.

    var_dump(spl_autoload_functions());을 실행하면 Laravel이 설정 한 오토로더가 표시됩니다.

  • 4

    Laravel은 composer을 코어에 사용하며 PSR-0/PSR-4 호환 오토로더를 가지고 있습니다.

    PSR-0 및 PSR-4 표준은 네임 스페이스에 따라 폴더를 해결하는 방법을 결정합니다. 그리고 laravel의 Autoloader, PHP의 Autoloading을 통해 문제를 해결하고 올바른 파일을 포함 할 수 있습니다.

    +0

    내가 한 것처럼 전체 경로를 지정하면 작동합니까? 예 : 'use vendor \ laravel \ framework \ src \ Illuminate \ Http \ Request; ' – Black

    +1

    아니요. 그렇지 않습니다. 'use' 키워드는 클래스의 [네임 스페이스 경로] (http://php.net/manual/en/language.namespaces.importing.php)를 사용하고 있습니다. 실제 파일 경로가 아닙니다. 그들은 PSR-0/PSR-4가 그렇게 말하기 때문에 비슷하게 보입니다. 그들은 효과적으로 "네가 네임 스페이스 경로에 따라 파일을 찾는 방법에 대해"라고 효과적으로 말합니다. 자세한 내용은 [PSR-4 spec] (http://www.php-fig.org/psr/psr-4/)을 읽어야합니다. –

    +0

    하지만 네임 스페이스는'namespace App \ Http \ Controllers'입니다. 그래서 왜 그들이 use .. \ .. \ Illuminate \ Http \ Request; 대신'use Illuminate \ Http \ Request;'를 사용하고 있습니다 네임 스페이스에서? – Black