3.2.2版本开始支持插件控制器的调用,可以通过更加方便的URL地址访问到模块中的插件定义的控制器。 当URL中传入插件控制器变量的时候,会自动定位到插件控制器中的操作方法。 插件控制器的变量由参数 `VAR_ADDON` 进行设置,默认为`addon`,例如我们在URL中传入: http://serverName/Home/info/index/addon/SystemInfo 由于传入了addon参数,因此这里的Info控制器并非原来的 ~~~ Home/Controller/InfoController.class.php ~~~ 而是调用`SystemInfo`插件(位于`Home/Addon`目录下面)的`InfoController`控制器了,文件位于 `Home/Addon/SystemInfo/Controller/InfoController.class.php`。 插件控制器本身的定义和普通的访问控制器一样,例如: ~~~ namespace Home\Addon\SystemInfo\Controller; class InfoController extends \Think\Controller{ public function index(){ echo 'Addon SystemInfo'; } } ~~~ 这样,我们在访问http://serverName/Home/info/index/addon/SystemInfo的时候 就会输出 `Addon SystemInfo` 如果我们的插件目录不是Addon,而是Plugin,那么需要在配置文件中定义: ~~~ 'VAR_ADDON' => 'plugin' ~~~ 然后访问URL地址就变成了 http://serverName/Home/info/index/plugin/SystemInfo > 注意:目前插件控制器仅支持模块的插件控制器访问,尚不支持全局的公共插件。 3.2.3版本开始,插件控制器默认和模块同级,并增加`ADDON_PATH`常量用于定义插件控制器的目录,并且以目录名作为插件控制器的命名空间根,同样,假如我们在URL中传入: ~~~ http://serverName/Home/info/index/addon/SystemInfo ~~~ 3.2.3版本中,实际访问的插件控制器是 ~~~ Addon/SystemInfo/Controller/InfoController.class.php ~~~ 插件控制器的定义如下: ~~~ namespace Addon\SystemInfo\Controller; class InfoController extends \Think\Controller{ public function index(){ echo 'Addon SystemInfo'; } } ~~~ 默认情况下,插件控制器的根目录位于和模块同级的Addon目录下面,如果需要更改插件控制器的目录,可以定义`ADDON_PATH`常量,例如: ~~~ define('ADDON_PATH', APP_PATH.'Common/Addon'); ~~~ 并且在项目配置文件中使用`AUTOLOAD_NAMESPACE`参数重新定义`Addon`的命名空间路径,例如: ~~~ 'AUTOLOAD_NAMESPACE'=>array( 'Addon'=> APP_PATH.'Common/Addon', ) ~~~