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; } }
