我目前正在尝试更多地了解OpenCart的核心以及它的类实际如何工作.我也试图提高我的OOP技能,因为我仍然在该领域学习,所以也许是我看不到的明显的东西.
我想知道控制器文件如何知道如何找到购物车类(例如).
例如
在目录/控制器/结帐车中有(显然删除了代码)
class ControllerCheckoutCart extends Controller {
public function index() {
$this->cart->update();
}
}
Run Code Online (Sandbox Code Playgroud)
Controller类可以在system/engine/controller.php中找到
update() 可以找到系统/图书馆/购物车.
我假设在controller.php中会有一个指向购物车类的链接,或者是一个由它制作的对象.(我的基础是使用$this->).
那么如何从控制器中找到购物车类?
谢谢
首先,你ControllerCheckoutCart扩展了Controller课程,所以这是我们需要关注的课程.你可以找到这个课程/system/engine/controller.php.
在这个类中,有两个我们感兴趣的魔术方法.第一个是__construct,因为在这里加载了一个"注册表"类(/system/engine/registry.php如果你有兴趣选择那个 - 它非常简单).
您可以将此视为对商店使用的所有类的查找,例如模型文件,库文件等.在构造中,注册表被传递给控制器,因此它具有对它的引用
public function __construct($registry) {
$this->registry = $registry;
}
Run Code Online (Sandbox Code Playgroud)
第二个也是更重要的魔法是__get方法.当一个classes属性不存在时调用它,如果你愿意,你可以自己处理它.OpenCart使用它来尝试从注册表中获取具有该键的类
public function __get($key) {
return $this->registry->get($key);
}
Run Code Online (Sandbox Code Playgroud)
所以$this->cart在任何控制器中都会尝试cart从注册表中获取带有密钥的对象.如果你查看index.php文件,你会看到它在那里分配
// Cart
$registry->set('cart', new Cart($registry));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6729 次 |
| 最近记录: |