이미이 스레드에 댓글을했지만 그래서 개방하고있어 죽은 것 같다 새 : Dependency Injection Slim Framework 3는 의존성 삽입 (Dependency Injection) - 자신의 클래스로 컨테이너를 통과
게시물은 위의 주 slims를 전달하는 방법을 설명 스스로 작성한 수업에 대한 컨테이너.
그러나 OP는 Slim에서 Dependency Inject ALL 클래스를 가져올 수 있는지 묻습니다.
컨테이너를 클래스로 전달해야 할 경우 DRY가 될 것 같으므로이를 수행하는 방법이 있는지 알고 싶습니다. 모든 클래스를 사용하고 싶습니다. 예를 들어
, 나는이 문서에 따라이 사용할 수 없습니다 (내 자신의 클래스 중 하나에 리디렉션, 을하는 등) 슬림의 기능 중 하나를 사용하려면 :$res->withStatus(302)->withHeader('Location', 'your-new-uri');
때문에 $res
(응답 객체)은 내가 주입/통과하지 않는 한, 내 클래스의 범위 안에 있지 않습니다.
문제는 100 개의 클래스를 말하면 컨테이너를 100 번 (또는 주입해야합니까?) 필요합니까? 그것은 정말로, 정말로 지루해 보인다.
CakePHP와 같은 프레임 워크에서는 'AppController'를 사용하여 전역 적으로 이와 같은 작업을 수행 할 수 있습니다. 즉, 한 번 정의하고 모든 클래스에서 사용할 수있게 만들 수 있습니다. Slim은이 기능을 제공하지 않습니까? 그렇지 않다면 그것은 심각한 단점이 있습니다. http://slimframework.com/docs/tutorial/first-app.html - - 그들이 당신이 먼저 응용 프로그램 자습서를 보면
: -
편집 내가 더 문제를 시도하고 설명하기 위해 만들어 놓은 의견 중 하나에서이 추가 해요 컨테이너에 PDO 데이터베이스 연결을 추가합니다.
하위 디렉토리에 100 개의 별도 클래스가 있고 (예 : ../classes/ 디렉토리가 있음), spl_autoload_register()
을 사용하여 index.php에 자동로드를 가정 해 봅시다. 컨테이너는 해당 클래스에서 사용할 수 없습니다.
내가 100 개의 별도의 시간을 전달해야한다면, 수업을 하나씩 사용할 때마다 PDO 연결을 얻으려고하면 그 코드가 매우 반복적입니다. 즉 DRY가 아닙니다.
슬림은 기본적으로 DIC로 여드름을 사용하고 있으므로 어쩌면 그 부분을 살펴 봐야할까요? http://pimple.sensiolabs.org/ –
AFAIK, 여드름에는 생성자 의존성을 자동으로 해결할 방법이 없습니다. 따라서 모든 클래스를 컨테이너에 등록해야합니다. 그러나 이것이 DRY에 반대하는 이유는 모르겠다. 컨테이너에 클래스를 등록 할 때 컨테이너의 종속성을 계속 주입하므로 모든 클래스는 한 번만 등록되고 해결됩니다 ... 여드름 사이트의 예를 확인하십시오. –
@MagnusEriksson이 예제를 제공합니다 - 첫 번째 애플리케이션 자습서 (http://www.slimframework.com/docs/tutorial/first-app.html)를 보면 컨테이너에 PDO 데이터베이스 연결이 추가됩니다. 이제 .. 하위 디렉토리에 100 개의 별도 클래스가 있다고 가정 해 봅시다. (예를 들어 ../classes/ 디렉토리가 있습니다) spl_autoload_register()를 사용하여 index.php에 자동로드합니다. 컨테이너는 해당 클래스에서 사용할 수 없습니다. 본질적으로 동일한 코드를 100 번 반복하기 때문에 각 클래스에서 PDO 연결을 얻으려면 100 번이나 쓰는 것이 좋습니다. DRY가 아닙니다. – Andy