register方法
正如前面所提到的,在register方法中只绑定事物到服务容器,而不要做其他事情,否则,一不小心就能用到一个尚未被加载的服务提供者提供的服务。
现在让我们来看看一个基本的服务提供者长什么样:
namespace AppProviders;
use RiakConnection; use IlluminateSupportServiceProvider;
class RiakServiceProvider extends ServiceProvider{
/**
* 在容器中注册绑定.
*
* @return void
*/
public function register()
{
$this->app->singleton('Riak\Contracts\Connection', function ($app) {
return new Connection(config('riak'));
});
} } 该服务提供者只定义了一个register方法,并使用该方法在服务容器中定义了一个Riak\Contracts\Connection的实现。
boot方法
如果我们想要在服务提供者中注册视图composer该怎么做?这就要用到boot方法了。该方法在所有服务提供者被注册以后才会被调用,这就是说我们可以在其中访问框架已注册的所有其它服务:
namespace AppProviders;
use IlluminateSupportServiceProvider;
class EventServiceProvider extends ServiceProvider{
/**
* Perform post-registration booting of services.
*
* @return void
*/
public function boot()
{
view()->composer('view', function () {
//
});
}
/**
* 在容器中注册绑定.
*
* @return void
*/
public function register()
{
//
} } boot方法的依赖注入
我们可以在boot方法中类型提示依赖,服务容器会自动注册你所需要的依赖:
use IlluminateContractsRoutingResponseFactory;
public function boot(ResponseFactory $factory){
$factory->macro('caps', function ($value) {
//
}); }