例如,你想在你的应用程序中使用一些文件存储
App::bind( 'MyApp/FileStorage', function(){
return new AmazonFileStorage;
});
或者
App::bind( 'MyApp/FileStorage', 'AmazonFileStorage');
bind方法的第一个参数是绑定到容器的唯一id,第二个参数是每次解析FileStorage类时要执行的回调函数,我们也可以传递一个代表类名的字符串。
所以也许以后你想使用其他文件存储服务。
您只需要更改您的绑定,因为在您的应用程序中您将使用“MyApp/FileStorage”
App::bind( 'MyApp/FileStorage', 'SystemFileStorage');
在这种情况下
$this->app->bind(
'Illuminate\Contracts\Auth\Registrar',
'App\Services\Registrar'
);
有接口Registrar:
<?php namespace Illuminate\Contracts\Auth;
interface Registrar {
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
public function validator(array $data);
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
public function create(array $data);
}
和服务注册商
<?php namespace App\Services;
use App\User;
use Validator;
use Illuminate\Contracts\Auth\Registrar as RegistrarContract;
class Registrar implements RegistrarContract {
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
public function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
public function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}
然后在 'App\Http\Controllers\Auth\AuthController' 中注入
这背后的概念是“绑定接口到实现”你可以在官方 laravel 5 文档http://laravel.com/docs/5.0/container#binding-interfaces-to-implementations 中阅读它,如果它没有帮助,问:)