codecamp

基本用法

绑定

几乎你所有服务容器将与已注册的服务提供者绑定,这些例子都在情境(context)使用容器做说明,如果应用程序其它地方需要容器实例,如工厂(factory),能以类型提示 Illuminate\Contracts\Container\Container 注入一个容器实例。另外,你可以使用 App facade 访问容器。

注册基本解析器

在一个服务提供者内部,你总是可以通过 $this->app 实例变量来访问到容器。

在服务提供者里,总是通过 $this->app 实例变量使用容器。

服务容器注册依赖有几种方式,包括闭包回调和绑定实例的接口。首先,我们来探讨闭包回调的方式。被注册至容器的闭包解析器包含一个 key (通常用类名称) 和一个有返回值的闭包:

$this->app->bind('FooBar', function($app)
{
    return new FooBar($app['SomethingElse']);
});

注册一个单例

有时候,你可能希望绑定到容器的对象只会被解析一次,之后的调用都返回相同的实例:

$this->app->singleton('FooBar', function($app)
{
    return new FooBar($app['SomethingElse']);
});

绑定一个已经存在的实例

你也可以使用 instance 方法,绑定一个已经存在的实例到容器,接下来将总是返回该实例:

$fooBar = new FooBar(new SomethingElse);

$this->app->instance('FooBar', $fooBar);

解析

从容器解析出实例有几种方式。
一、可以使用 make 方法:

$fooBar = $this->app->make('FooBar');

二、你可以像「访问数组」一样对容器进行访问,因为它实现了PHP的 ArrayAccess 接口:

$fooBar = $this->app['FooBar'];

最后,也是最重要的一点,你可以在构造函数中简单地「类型指定(type-hint)」你所需要的依赖,包括在控制器、事件监听器、队列任务,过滤器等等之中。容器将自动注入你所需的所有依赖:

<?php namespace App\Http\Controllers;

use Illuminate\Routing\Controller;
use App\Users\Repository as UserRepository;

class UserController extends Controller {

    /**
     * The user repository instance.
     */
    protected $users;

    /**
     * Create a new controller instance.
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }

    /**
     * Show the user with the given ID.
     *
     * @param  int  $id
     * @return Response
     */
    public function show($id)
    {
        //
    }

}
缓载提供者
将接口绑定到实现
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

环境配置

系统服务

哈希

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }