laravel 용기 지연 로드 및 auth 확장 상세 설명
문제점 을 발견 하 다
내 가 Loauth Service Provider 에 이렇게 썼 을 때:
public function register()
{
//
\Auth::extend('loauth',function($app){});
}
잘못 을 보고 하 다
Call to undefined method Illuminate\Support\Facades\Auth::extend()
원인 을 찾다그 때 는 궁금 했다.이 유 를 찾 아 Auth 가 등록 하지 않 았 다 고 의심 했다?경로 에서 사용 할 수 있 기 때문에 등 록 된 것 을 확인 합 니 다.php artisan clear-copiled 소 용 없어 요.아무리 생각해 도 이해 가 안 되 고 내 가 실수 로 핵심 류 를 수정 했다 고 의심 할 정도 로 laravel 가방 을 다시 다운로드 했다.문 제 는 여전 하 다.
밤새 고생 끝 에 나 는 AuthServiceProvider 의$defer 속성 에 시선 을 고정 시 켰 다.
매 뉴 얼 및 설명 에 따 르 면$defer 속성 은 이 서비스 제공 자 를 불 러 오 는 것 을 지연 시 키 는 데 사 용 됩 니 다.직 설 적 으로 register()를 지연 시 키 는 방법 이 라 고 합 니 다.provides()방법 에 맞 추 면 이 루어 집 니 다.예 를 들 어:
public function provides()
{
return array('auth');
}
이것 은 AuthServiceProvider 의 방법 입 니 다.프레임 워 크 가 초기 화 될 때 서비스 제공 자 를 순서대로 불 러 옵 니 다.이 서비스 제공 자 proctected$defer=true 를 발견 하면 provides()방법 을 호출 합 니 다.되 돌아 오 는 배열 은 로드 지연 이 필요 한 서비스 이름 을 포함 하고 있 습 니 다.컨트롤 러 나 다른 곳 에서 Auth::METHOD()를 호출 할 때 만 제공 자의 register()방법 을 호출 합 니 다.문제점 을 확정 하 다
그러면 문제 가 생 겼 습 니 다.수 동적 으로 로드 를 지연 시 키 는 것 입 니 다.즉,Auth 류 방법 을 호출 할 때 Auth 류 를 자동 으로 예화 해 야 합 니 다.왜 제 가 Loauth Service Provider 에서 호출 할 때 제시 방법 은 존재 하지 않 지만 경로 에 서 는 괜 찮 습 니까?
우선 순위 문제 로 인해 프레임 워 크 에 Loauth ServiceProvider::register()를 등록 할 때 Auth 가 로드 지연 으로 표시 되 지 않 았 기 때문에 선후 문제 가 생 겼 습 니 다.즉시 로드 하 는 서비스 제공 자 는 register 방법 에서 로드 지연 서 비 스 를 호출 할 수 없습니다.
연 구 를 통 해 핵심 코드 에서 증 거 를 순조롭게 찾 았 습 니 다 Illuminate\Foundation\Provider Repository
public function load(Application $app, array $providers)
{
//...
// We will go ahead and register all of the eagerly loaded providers with the
// application so their services can be registered with the application as
// a provided service. Then we will set the deferred service list on it.
foreach ($manifest['eager'] as $provider)
{
$app->register($this->createProvider($app, $provider));
}
//
$app->setDeferredServices($manifest['deferred']);
}
해결 의 길문제 의 소 재 를 발 견 했 지만 문제 가 해결 되 는 것 은 아니다.핵심 코드 를 수정 하 는 것 은 현명 한 선택 이 아니 기 때문에 우리 자신의 가방 에서 방법 을 강구 할 수 밖 에 없다.하나의 해결 방안 은 다음 과 같다.
public function register()
{
//
$authProvider = new \Illuminate\Auth\AuthServiceProvider($this->app);
$authProvider->register();
\Auth::extend('loauth',function($app){});
}
auth 가 아직 등록 되 지 않 았 으 니,우 리 는 그것 의 register 방법 을 수 동 으로 호출 하여 등록 을 도 왔 다.이상 이 바로 본문의 전체 내용 이 니 여러분 들 이 좋아 하 시 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.