tinker 에서는 라라벨의 모든 기능을 사용할 수 있으므로 라라벨 애플리케이션을 구동하고 웹 브라우저로 연결하지 않아도 컨트롤러 객체를 생성하고 메소드를 호출할 수 있습니다.

이는 새로운 아이디어를 시험하거나 프로토 타이핑을 할 경우에 유용한 기능입니다.

 

tinker에서 컨트롤러를 테스트해 보려면 먼저 php artisan tinker 명령어로 tinker 쉘로 들어갑니다.

 

컨트롤러는 라라벨 애플리케이션을 의미하는 싱글톤인 App 객체의 메소드중에 의존성을 주입해 주는 메소드인 make() 를 통해서 만들수 있습니다.

첫번째 파라미터는 생성할 컨트롤러를 네임 스페이스를 포함하여 적어주면 되며 전 절에서 생성한 암시적 컨트롤러인 ImplicitController 를 생성하여 $ctl 변수에 할당해 봅시다.

>>> $ctl = \App()->make('App\Http\Controllers\ImplicitController')
=> App\Http\Controllers\ImplicitController {#682}
CODE

이제 $ctl 은 컨트롤러 객체이므로 컨트롤러의 메소드를 바로 호출해 볼 수 있습니다.

 

예를 들면 show URI 를 GET 방식으로 호출할 때 실행하는 getShow() 메소드는 아래와 같이 바로 호출할 수 있습니다.

>>> $ctl->getShow(3)
=> "getShow : 3"
CODE

 

POST 방식이어야만 호출되는 메소드인 postProfile() 도 tinker 에서는 바로 호출할 수 있습니다.

>>> $ctl->postProfile() 
=> "postProfile"
CODE

 

위 기능을 사용하면 컨트롤러 메소드를 파라미터를 조금씩 변경하면서 테스트를 해야 하는 경우등에 유용하게 사용할 수 있습니다. 또 동적으로 컨트롤러를 생성하는 기법은 컨트롤러 외부에 있는 클래스에서 컨트롤러의 메소드를  호출해야 할 경우 유용하게 사용할 수 있습니다.