Laravel5中服务提供者应用实例

时间:2017-03-20 23:42:03 类型:PHP
字号:    

Laravel中服务提供者到容器的使用是一个非常核心的概念应用, 给一个实际应用实例方便大家理解学习

实例过程简介:

1. 定义接口名称  GobjContract [去北京]

2. 实现接口的两个方法 WalkbjService [步行去北京],  TrainbjService[搭火车去北京], 当然, 还可以有好多种实现了

3. 服务提供者注册, 注册去北京的方法, 注册哪个方法, 在应用中  依赖注入时, 就会使用哪种方法[这个是 服务提供者的 主要用途]

注意: 如果是单独的一个实例, 没有应用 契约[PHP接口], 就没有必要使用服务提供者了[Laravel本身支持自动加载注入]

实现步骤如下:

第一步: 定义去北京的接口


namespace App\Contracts;
//去北京的接口
interface GobjContract
{
	public function howTo();
}
第二步:定义实现去北京的方法:


1> 

namespace App\Services;
use App\Contracts\GobjContract;
//步行去北京
class WalkbjService implements GobjContract
{
	public function howTo(){
		echo "我要步行去北京";
	}
}
2>
namespace App\Services;
use App\Contracts\GobjContract;
//步行去北京
class TrainbjService implements GobjContract
{
	public function howTo(){
		echo "我要乘火车去北京";
	}
}
第三步: 实现服务提供者 php artisan make:provider GobjServiceProvider
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\WalkbjService;
use App\Services\TrainbjService;
class GobjServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     * @return void
     */
    public function boot()
    {
    }
    /**
     * Register the application services.
     * @return void
     */
    public function register()
    {
        //绑定去北京的方法为步行
        $this->app->bind('App\Contracts\GobjContract',function(){
            return new WalkbjService();
        });
        
        //绑定去北京的方法为乘火车
        /*$this->app->bind('App\Contracts\GobjContract',function(){
            return new TrainbjService();
        });*/
    }
}

第四步:注册服务提供者到容器 App\Providers\GobjServiceProvider::class

第五步:配置路由: Route::resource('gobj','GobjController');

第六步: 创建控制器: php artisan make:controller GobjController

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App;
use App\Contracts\GobjContract;

class GobjController extends Controller
{
    //
    protected $gobj;
    public function __construct(GobjContract $gobj)
    {
    	$this -> gobj = $gobj;
    }
    public function index()
    {
    	$this -> gobj -> howTo();
       //服务提供者绑定步行: 这里输出结果为步行
       //服务提供者绑定乘火车:这里输出结果为 乘火车
   }
}

现在可以通过浏览器进行访问了:http://laravel.cn/gobj