ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
> ## 依赖注入请求对象(针对控制器) ### 如果继承了系统的Controller类的话,可以直接调用request属性,例如: ``` use think\Controller; class Index extends Controller { public function hello() { return 'Hello,'.$this->request->param('name'); } } ``` ### 注入控制器的构造方法中 ``` use think\Request; class Index { protected $request; // 用来保存请求对象 // 将请求对象注入构造方法 public function __construct(Request $request) { $this->request = $request; } // 在其他方法中使用请求对象 public function hello() { return 'Hello,' . $this->request->param('name') . '!'; } } ``` ### 注入控制器的一般方法中 ``` use think\Request; class Index { public function hello(Request $request) { return 'Hello,' . $request->param('name') . '!'; } } ``` >## 依赖注入任意类的对象(针对控制器) ### 注入控制器的构造方法中 ``` use app\index\model\User; class Index { protected $user; public function __construct(User $user) { $this->user = $user; } } ``` ### 注入控制器的一般方法中 ``` use app\index\model\User; use think\Controller; class Index extends Controller { public function hello(User $user) { return 'Hello,'.$user->name; } } // 事先在Request进行对象绑定 Request::instance()->bind('user', \app\index\model\User::get(1)); // 如果没有事先在Request进行对象绑定,那么当调用hello方法时会自动实例化一个对象,相当于下面 Request::instance()->bind('user', new \app\index\model\User); ``` ### 调用依赖注入类的静态invoke方法可以自动实例化注入的对象 ``` class User extends Model { // 需要传入当前请求对象作为参数 public static function invoke(Request $request) { $id = $request->param('id'); return User::get($id); } } ```