• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解Laravel框架的依赖注入功能

    概述

    任何时候,你在一个控制器类中请求一个依赖,这个服务容器负责:

    1.自动地在构造函数中检测依赖关系

    2.如果需要构建这个依赖关系

    3.通过构造函数创建对象形成依赖关系

    来看一个非常简单的例子。

    ?php
    namespace App\Http\Controllers;
    use App\User;
    use App\Repositories\UserRepository;
    use App\Http\Controllers\Controller;
    class UserController extends Controller
    {
        protected $userRepository;
        public function __construct(UserRepository $userRepository)
        {
            $this->userRepository = $userRepository;
        }
        public function show($id)
        {
            $user = $this->userRepository->find($id);
            return view('user.profile', ['user' => $user]);
        }
    }

    假如,你有一个UserController类需要UserRepository作为一个构造函数依赖。

    1.服务容器使用PHP的反射类来检测,事实UserRepository需要被优先解析。

    2.然后,它构造UserRepository实例。

    3.然后,它构造UserController类实例。

    依赖关系是如何被解析和注入的,我被很多Laravel开发人员不知道这个简单而强大的技术感到迷惑。 这是一个非常强大的技术,它可以被用来解决复杂对象的依赖关系。

    如果由于某种原因,您不希望Laravel自动构建一个对象,您还可以通过传递一个可用于创建依赖关系的回调来告诉Laravel Service Container如何构造该对象。

    ?php
    $container->bind('My\Service', function($container) {
    return new My\Service($container->make('My\AnotherService'));
    });

    您需要创建一个服务提供商来注册上述服务。

    ?php
    namespace App\Providers;
    use Illuminate\Support\ServiceProvider;
    class MyServiceProvider extends ServiceProvider
    {
        public function register()
        {
            $this->app->singleton(\My\Service::class, function ($app) {
                return new \My\Service($app->make('My\AnotherService'));
            });
        }
    }

    当My\Service需要被解析的时候,负责返回一个对象的回调函数就会被调用。

    ?php
    namespace App\Http\Controllers;
    use App\User;
    use App\Http\Controllers\Controller;
    class MyController extends Controller
    {
        protected $myService;
        public function __construct(\My\Service $myService)
        {
            $this->myService = $myService;
        }
        // .. 方法
    }

    真实的例子

    假设你的应用需要Facebook的PHP SDK来访问Facebook的API,你的控制器就是这样的:

    ?php
    namespace App\Http\Controllers;
    use App\User;
    use App\Http\Controllers\Controller;
    use Facebook\Facebook;
    class FacebookApiAccessController extends Controller
    {
        protected $facebook;
        public function __construct(Facebook\Facebook $facebook)
        {
            $this->facebook = $facebook;
        }
        //.. action methods here
    }

    现在,您需要告诉Service Container如何构建Facebook\Facebook的实例.

    ?php
    $container->singleton('Facebook\Facebook', function() {
      return new \Facebook\Facebook([
        'app_id' => config('services.facebook.app_id'),
        'app_secret' => config('services.facebook.app_secret'),
        'default_graph_version' => 'v2.10',
      ]);
    });

    注意,我已经调用了方法singleton而不是bind。 唯一的区别是用singleton注册的服务被缓存,随后的解析服务调用返回缓存的服务。

    结论

    依赖注入是一种强大的技术,你可以在Laravel中用来简化对象的创建. 默认情况下,Laravel的服务容器会自动的用反射去检测和解决依赖关系. 但是, 你可以指定回调来解析服务.

    以上就是详解Laravel框架的依赖注入功能的详细内容,更多关于Laravel框架的依赖注入功能的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • 浅谈Laravel中使用Slack进行异常通知
    • 如何用Laravel包含你自己的帮助函数
    • php+laravel 扫码二维码签到功能
    • laravel的数据表填充器使用详解
    • laravel ajax curd 搜索登录判断功能的实现
    • Laravel中Kafka的使用详解
    • laravel使用redis队列实例讲解
    • Laravel的加密解密与哈希实例讲解
    • Laravel中10个有用的用法小结
    • 分析五个Laravel Dusk的使用技巧
    上一篇:详解PHP Swoole与TCP三次握手
    下一篇:如何用Laravel包含你自己的帮助函数
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    详解Laravel框架的依赖注入功能 详解,Laravel,框架,的,依赖,