Eyoucms程序开发:依赖注入
ThinkPHP的依赖注入(也称之为控制反转)是一种较为轻量的实现,无需任何的配置,并且主要针对访问控制器进行依赖注入。可以在控制器的构造函数或者操作方法(指访问请求的方法)中类型声明任何(对象类型)依赖,这些依赖会被自动解析并注入到控制器实例或方法中。
自动注入请求对象
架构方法注入
在控制器的架构方法中会自动注入当前请求对象,例如:
namespace app\index\controller;
use think\Request;
class Index
{
protected $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function hello()
{
return 'Hello,' . $this->request->param('name') . '!';
}
}
操作方法注入
控制器的操作方法中如果需要调用请求对象Request的话,可以在方法中定义Request类型的参数,并且参数顺序无关,例如:
namespace app\index\controller;
use think\Request;
class Index
{
public function hello(Request $request)
{
return 'Hello,' . $request->param('name') . '!';
}
}
访问URL地址的时候 无需传入request参数,系统会自动注入当前的Request对象实例到该参数。
如果继承了系统的Controller类的话,也可以直接调用request属性,例如:
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function hello()
{
return 'Hello,'.$this->request->param('name');
}
}
其它对象自动注入(V5.0.1)
从5.0.1版本开始,控制器的架构方法和操作方法支持任意对象的自动注入。
架构方法注入
namespace app\index\controller;
use app\index\model\User;
use think\Request;
class Index
{
protected $request;
protected $user;
public function __construct(Request $request, User $user)
{
$this->request = $request;
$this->user = $user;
}
}
对于已经进行了绑定(属性注入)的对象,即可自动完成依赖注入,如果没有进行对象绑定的话,会自动实例化一个新的对象示例传入(如果类定义有
instance方法,则会自动调用instance方法进行实例化)。
架构方法的依赖注入不影响其它类型的参数绑定。
操作方法注入
我们把User模型绑定到当前请求对象:
Request::instance()->bind('user', \app\index\model\User::get(1));
然后就可以在操作方法中进行对象参数的自动注入,代码:
namespace app\index\controller;
use app\index\model\User;
use think\Controller;
class Index extends Controller
{
public function hello(User $user)
{
return 'Hello,'.$user->name;
}
}
如果没有事先在Request对象中进行对象绑定的话,调用hello方法的时候user参数会自动实例化,相当于完成了下面的绑定操作:
Request::instance()->bind('user', new \app\index\model\User);
对象自动注入不影响原来的参数绑定。
invoke方法自动调用(v5.0.2)
5.0.2版本开始,如果依赖注入的类有定义一个可调用的静态invoke方法,则会自动调用invoke方法完成依赖注入的自动实例化。
invoke方法的参数是当前请求对象实例,例如:
namespace app\index\model;
use think\Model;
class User extends Model
{
public static function invoke(Request $request)
{
$id = $request->param('id');
return User::get($id);
}
}
相关文档
- 解析加快网站页面加载速度提升seo优化效果的方法
- 撬开网站流量上涨乏力的魔咒就是事件营销
- 营销型网站怎么做才有利于建立与搜索引擎之间的信任
- 智能型营销网站建设的成功是离不开搜索引擎的优化协助
- 在网络推广的发展趋势下,网站SEO优化首当其冲
- seo优化公司卖的是SEO技术还是SEO服务?
- 移动端搜索的重要性和SEO优化意义
- 自适应网站是否需要升级到独立的移动端链接?
- 常见的网站SEO诊断方法
- 专业的网站优化公司只会解决网站排名难题,挖掘网站价值
- 将SEO融入到网站运营能更好的排名!
- 搜索引擎优化的定义和价值
- 熟知seo关键词优化进度才能更好推进企业网站的发展
- 网络营销是一门有技术的学问,需要紧跟科技创新市场营销变化
- 做网站优化还需要找有seo实战经验的公司
- 网站做SEO优化的三大优点让企业受益颇多
- 有效执行是SEO网站排名的关键
- 从SEO优化师的角度看网站改版
- 内链优化的六大细节要注意
- 企业网站搜索引擎优化的必要性
上一篇: Eyoucms程序开发:参数绑定
下一篇: Eyoucms程序开发:请求缓存

