多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
构造函数注入 Laravel 使用服务容器解析所有的 Laravel 控制器,因此,可以在控制器的构造函数中类型声明任何依赖,这些依赖会被自动解析并注入到控制器实例中: ~~~ <?php namespace App\Http\Controllers; use Illuminate\Routing\Controller; use App\Repositories\UserRepository; class UserController extends Controller { /** * The user repository instance. */ protected $users; /** * 创建新的控制器实例 * * @param UserRepository $users * @return void */ public function __construct(UserRepository $users) { $this->users = $users; } } ~~~ 当然,你还可以类型提示任何 Laravel 契约,如果容器可以解析,就可以进行类型提示。 方法注入 除了构造函数注入之外,还可以在控制器的动作方法中进行依赖的类型提示,例如,我们可以在某个方法中类型提示 Illuminate\Http\Request 实例: ~~~ <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Routing\Controller; class UserController extends Controller { /** * 存储新用户 * * @param Request $request * @return Response */ public function store(Request $request) { $name = $request->input('name'); // } } ~~~ 如果控制器方法期望输入路由参数,只需要将路由参数放到其他依赖之后,例如,如果你的路由定义如下: ~~~ Route::put('user/{id}', 'UserController@update'); ~~~ 你需要通过定义控制器方法如下所示来类型提示 Illuminate\Http\Request 并访问路由参数 id: ~~~ <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Routing\Controller; class UserController extends Controller { /** * 更新指定用户 * * @param Request $request * @param int $id * @return Response */ public function update(Request $request, $id) { // } } ~~~