无法覆盖magento核心配置模型

cs7cruho  于 2024-01-08  发布在  其他
关注(0)|答案(2)|浏览(178)

无法覆盖magento核心配置模型Mage_Core_Model_Config。我有magento 1.9.2.1。这里是配置文件. xml

  1. <global>
  2. <helpers>
  3. <peexl_customflatrate>
  4. <class>Peexl_CustomFlatrate_Helper</class>
  5. </peexl_customflatrate>
  6. </helpers>
  7. <models>
  8. <peexl_customflatrate>
  9. <class>Peexl_CustomFlatrate_Model</class>
  10. </peexl_customflatrate>
  11. <core>
  12. <rewrite>
  13. <config>Peexl_CustomFlatrate_Core_Config</config>
  14. </rewrite>
  15. </core>

字符串
Peexl/CustomFlatrate/Model/Core/Config.php

  1. class Peexl_CustomFlatrate_Model_Core_Config extends Mage_Core_Model_Config
  2. {
  3. }


什么都没发生:(

jgzswidk

jgzswidk1#

是的,你不能。
Magento的类重写系统可以工作,因为几乎所有的Magento对象都是通过Mage::getModel静态类示例化的。

  1. $foo = new Some_Class_File_Here;

字符串
Magento的类重写将无法替换已示例化的类。Magento需要在没有重写系统的情况下示例化一些对象。Magento需要在没有重写系统的情况下示例化这些类,因为它们是实现重写系统的实际类。
这些课程包括

  1. self::$_objects = new Varien_Object_Cache;
  2. self::$_app = new Mage_Core_Model_App();
  3. self::$_events = new Varien_Event_Collection();
  4. self::$_config = new Mage_Core_Model_Config($options);


如果你想修改这个类的行为,你有两个选择。
首先,可以创建本地代码池重写

  1. app/code/local/Mage/Core/Model/Config.php


使用app/code/copy/Mage/Core/Model/Config.php中的类的精确副本,加上您的更改。这样做的缺点是您需要在升级Magento时手动更新该类,如果您不小心,您可能会破坏核心代码所依赖的功能。
其次,Magento 1的现代版本包含了一个可选配置类的选项。

  1. #File: app/Mage.php
  2. protected static function _setConfigModel($options = array())
  3. {
  4. if (isset($options['config_model']) && class_exists($options['config_model'])) {
  5. $alternativeConfigModelName = $options['config_model'];
  6. unset($options['config_model']);
  7. $alternativeConfigModel = new $alternativeConfigModelName($options);
  8. } else {
  9. $alternativeConfigModel = null;
  10. }
  11. if (!is_null($alternativeConfigModel) && ($alternativeConfigModel instanceof Mage_Core_Model_Config)) {
  12. self::$_config = $alternativeConfigModel;
  13. } else {
  14. self::$_config = new Mage_Core_Model_Config($options);
  15. }
  16. }


可以看到Magento在$options数组的config_model键中查找类名。

  1. #File: index.php
  2. Mage::run($mageRunCode, $mageRunType, array('config_model'=>'Package_Module_Model_Config'));


这比本地代码池覆盖稍微好一点,因为Package_Module_Model_Config可以扩展基本配置类,并且您可以只更改您需要的内容。但是,它确实依赖于您维护自己的index.php引导文件,这使得它不适合重新分发。
希望能帮上忙!

展开查看全部
krcsximq

krcsximq2#

首先,你的重写不会工作,因为它是以错误的方式设置的。Rewrite. xml中的重写类名与文件中的类名不匹配,缺少“Model”一词。它应该是:

  1. <rewrite>
  2. <config>Peexl_CustomFlatrate_Model_Core_Config</config>
  3. </rewrite>

字符串

相关问题