所謂跨控制器調用,指的是在一個控制器中調用另一個控制器的某個方法。在ThinkPHP中有三種方式實現跨控制器調用:
- 直接實例化;
- A()函數實例化;
- R()函數實例化。
(1)直接實例化
直接實例化就是通過new關鍵字實例化相關控制器,例如:
1 $goods = new GoodsController() //直接實例化Goods控制器類 2 $info = $goods->info(); //調用Goods控制器類的info()方法
需要注意的是,如果實例化的控制器與當前控制器不在同一目錄下,需要指定絕對路徑。例如要實例化Admin模塊下的User控制器,代碼如下:
1 $goods = new \Admin\Controller\UserController();
(2)A()函數實例化
ThinkPHP提供了A()函數實例化其他控制器,使用方法如下:
1 $goods = A('Goods'); //A()函數實例化GoodsController類 2 $info = $goods->info(); //調用Goods控制器類的info()方法
從上述代碼可以看出,A()函數相對直接實例化的方式簡潔很多,僅需要傳入控制器名即可。A()函數同樣可以實例化其他模塊下的控制器,例如:
1 $goods = A('Admin/Goods');
(3)R()函數實例化
R()函數的使用與A()函數基本一致,唯一不同的是,R()函數可以在實例化控制器的時候把操作方法一並傳進去,如此就省略了調用操作方法的步驟,例如:
1 $info = R('Admin/Goods/info');