手动加载
插件模式下路由器不在起作用,我们可以通过Sr::factory()方法加载各种资源,比如控制器方法。
下面对它进行介绍:
1.首先我们看它的参数
Sr::factory($className, $hmvcModuleName = null)
我们看到有两个参数:
$className: 可以是完整的控制器类名,模型类名,类库类名
$hmvcModuleName: hmvc模块名称,是入口文件配置里面的数组的键名,插件模式下才会用到这个参数
该方法而且支持传递参数给构造方法,详细内容可以看下面2.4的介绍.
2.加载示例
2.1.比如加载控制器:application/classes/Controller/Welcome.php
$welcome=Sr::factory('Controller_Welcome');
//手动调用do_index方法,这里应该是按着我们具体的业务逻辑手动调用我们需要调用的方法。
$welcome->do_index();
2.2.比如加载hmvc模块控制器:application/hmvc/demo/classes/Controller/Welcome.php
而且入口文件里面注册了hvmc模块demo,Demo=>demo
。
$welcome=Sr::factory('Controller_Welcome','Demo');
$welcome->do_index();
2.3.比如加载模型:application/classes/Model/User.php
$userModel=Sr::factory('Model_User');
//手动调用do_index方法,这里应该是按着我们具体的业务逻辑手动调用我们需要调用的方法。
$userModel->do_something();
2.4.超级工厂方法Sr::factory($className, $hmvcModuleName = null)
第三个参数开始的参数Soter会按着参数顺序传递给你要实例化的类的构造方法.
比如:执行了Sr::factory('\Bean\User', null,669,'jack')
同时User类如下:
<?php
namespace Bean;
class User{
private $id=0,$name='';
public function __construct($id,$name){
this.id=$id;
this.name=$name;
}
}
那么669和jack就会作为$id和$name传递给User类的构造方法,如果要传递更多参数,
在调用Sr::factory('\Bean\User', null,669,'jack')的时候,后面依次写上即可.