我還沒有很好的理解laravel容器。
我的理解是,容器裡放了很多的可供呼叫的物件。
需要時可以直接使用,無需new等。
想問一下,大家都會用到這個特性麼?
專案中一般怎麼去用這個特性呢?是分出個service層,然後把各service放進容器裡?
在controller裡呼叫?
還是直接不用呢?
我還沒有很好的理解laravel容器。
我的理解是,容器裡放了很多的可供呼叫的物件。
需要時可以直接使用,無需new等。
想問一下,大家都會用到這個特性麼?
專案中一般怎麼去用這個特性呢?是分出個service層,然後把各service放進容器裡?
在controller裡呼叫?
還是直接不用呢?
Laravel容器是用來放Service的地方,這些Service就是一個個綁定到容器中的實例物件或閉包或其他的,綁定方式主要三種:bind(),singleton() and instance(),從容器解析Service方式:make(),這些都在IlluminateContainerContainer,而IlluminateFoundationApplication extends Container。
關於Container是如何運作的,當在Controller中使用Constructor Injection或Method Injection時,就已經在使用Container了,因為Container會自動幫你把這些服務解析出來,如:
<code>class AccountController extends Controller { // 这里是Method Injection,Container会自动解析出Request,而不需要去new Request获得对象 // 从容器中解析服务是用的Container::make()方法 public function test(Request $request) { return $request->ip(); } }</code>
所以容器服務一直都在用,總的來說容器就是分離了服務構造的場所,傳統是在被依賴對象內構造所需要的服務,而現在是在容器這個場所內構造所需依賴,而且是自動化的,並自動化注入到被依賴物件內,這樣就實現了解耦。
關於Container和Application的源碼解析可以看下:
Laravel學習筆記之Container源碼解析
Laravel學習筆記之IoC Container實例化源碼解析