エクステンションはどのようにしてre造に不可能なクラスを無効にしますか
-
16-10-2019 - |
質問
私は有効にするために小さな拡張機能をまとめるつもりでした テンプレートは、グローバル範囲の下でヒントを示します, 、しかし、書き直そうとして立ち往生しました core/template
.
クラスは、Magentoの方法の1つを介してインスタンス化されたクラスの作業のみを書き直し、helper
, getModel
, getSingleton
)。抽象的で重く拡張されたクラスの場合、あなたはのオプションが残されているようです local/Mage
オーバーライド。
2つの質問:
- 避けるための賢い方法はありますか?
local/Mage
常にオーバーライド? - そうでない場合、コミュニティ拡張にそのようなオーバーライドをどのように含めるのですか?
解決
1)コミュニティに提供する拡張機能は、コミュニティコードプールの下にある必要があります。
2)すべきではありませんが、できます。 デメテル Magento 1では多くの無視されています。
反射の使用を含む、オーバーライドする必要性をほとんど常に回避する方法があります しばらく前にヴィナイが述べたように.
回避策にはマイナス面が大きすぎる場合は、クラス定義の所有権を取得する必要があります。ユーザーが意識されている場合、次のいずれかを実行できます。
- コミュニティコードプールで、メイジの下で修正された定義を提供します| Varien |必要に応じてzend namespace。可能性のある懸念は、エンドユーザーが同じことをしたかもしれないということです。
- 上記のように、ただし新しいコードプールで:新しいコーデプールをブートストラップにプレップすると、使用を使用するパスが含まれます
set_include_path()
. 。欠点:もっとstat()
オートローダーによって引き起こされるing、およびインクルードパス操作は、ブートストラップの外側にあるため、非自明です。 - 可能であれば、通常の場所からロードされる前に、たとえば明示的に定義を自分で提供します
include()
名前空間の下の標準以外の場所からそれを届けます。
ケースバイケースのニーズをここで聞こえます - 誰かがアイデアを持っています。管理者範囲のテンプレートパスのヒントについては、 私の答えを見てください PHPさえ必要ありません。
所属していません magento.stackexchange