Sivo 悉见

Laravel 父类依赖注入且子类继承

匿名 · 更新于 2019/8/21

继承关系
BaseController→CommonController→UserController

BaseController依赖注入 Request和UsersRepository,代码如下

<?php
namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller; use Illuminate\Foundation\Application; use Illuminate\Http\Request; use App\Repositories\UsersRepository; class BaseController extends Controller {     //定义基类属性 可继承     protected $usersRepository;     //用户Repository     protected $request;     //请求数据     public function __construct(Application $application, Request $request = null, UsersRepository $usersRepository = null)     {         //==============依赖注入处理开始====================         static $dependencies;         // Get parameters         if ($dependencies === null) {             $reflector = new \ReflectionClass(CLASS);             $constructor = $reflector->getConstructor();             $dependencies = $constructor->getParameters();         }         foreach ($dependencies as $dependency) {             // Process only omitted optional parameters             if (${$dependency->name} === null) {                 // Assign variable                 ${$dependency->name} = $application->make($dependency->getClass()->name);             }         }         //依赖注入赋值         $this->request = $request;         $this->usersRepository = $usersRepository;         //==============依赖注入处理结束====================     } }


 
CommonController代码如下
<?php
namespace App\Http\Controllers\Api\Admin;

use App\Http\Controllers\Api\BaseController; use Illuminate\Foundation\Application; class CommonController extends BaseController {     protected $_user_info;     public function __construct(Application $application)     {         parent::__construct($application);     } }


 UserController代码如下
<?php
namespace App\Http\Controllers\Api\Admin;

use Illuminate\Foundation\Application; class UserController extends CommonController {     public function __construct(Application $application)     {         parent::__construct($application);     }     /**      * 1.1 获取用户信息      * @author caofei 2019.11.4      * @return Response      */     public function getUserInfo($user_id)     {         $userInfo = $this->usersRepository->find($user_id);         return $userInfo;     } }