필자가 이해 한 한, 클래스 공급자의 도움을 받아 인스턴스화하는 클래스의 생성자에서 클래스 인스턴스 인수를 입력 힌트 할 수 있어야합니다. 불행히도 누락 된 인수에 대한 오류가 발생합니다.Laravel 5 IoC 타입 힌팅이 작동하지 않습니다.
Tracker.php
function __construct($query, Tracker\Shipment $shipment) {
$this->query = $query;
$this->shipment = $shipment;
}
TrackerServiceProvider.php
class TrackerServiceProvider extends \Illuminate\Support\ServiceProvider {
public function register() {
$this->app->bind('TrackerAPI', function($app, $shipment_number) {
return new Tracker\API($shipment_number); // omitting Shipment argument should resolve on its own?
});
}
}
클래스 API 따라서 생성자를 사용하여, 추적기 연장된다. 왜 묵시적인 클래스 유형 힌트없이 해결되지 않습니까?
그래서 내 바인딩 (서비스 제공 업체)을 버리고 내 컨트롤러에서 App :: make (Tracker \ API)를 사용하면 처음 생각한대로 작동하게됩니까? – silkfire
@silkfire 예, 타입 힌트 (예 :'$ shipment_number')를 통해 빌드 할 수없는 매개 변수를 전달하는 한. Laravel이 자체적으로 알아 내지 못하는 것을하려는 경우에만 바인딩을 정의하면됩니다. 예를 들어 인터페이스를 삽입하는 경우 Laravel에게 해당 인터페이스에 대해 빌드 할 인스턴스를 지정하기 위해 바인딩을 만들어야합니다. 또는 '새'인스턴스를 삽입하고 싶지는 않지만 기존 인스턴스를 삽입하려는 경우 (예 : [Sentry] (https://cartalyst.com/manual/sentry/2.1) 서비스를 삽입하는 경우). – patricus
정말 고마워요! 방금 만든 메서드를 사용하여 배열의 배송 번호를 제공하고 자동으로 자동 해결되었습니다. 실제로 서비스 제공 업체가 필요하지 않습니다! 어느 편도 좋지만 이제는 내가 필요할 때 더 혼란스러워지고 있습니다. 나는 클래스의 같은 인스턴스를 사용하도록 할 필요가 없었고, 단순히 이미 작성된 변수를 코드에서 재사용했다. – silkfire