Sostituzione della classe proxy Magento 2


8

Devo sovrascrivere la classe \Magento\Catalog\Model\Product\Linkusando la preferenza, che funziona bene, ma la classe sopra menzionata ha una classe proxy generata automaticamente \Magento\Catalog\Model\Product\Link\Proxy, che non include i nuovi metodi aggiunti nella sostituzione. Esiste un modo per iniettare quei metodi nella classe proxy?

MODIFICARE

Ho provato a scavare in questo e ho scoperto che possiamo iniettare proxy usando di.xml. Ma quando ho provato a farlo, ho avuto un'eccezione che la classe Package\Module\Model\Class\Proxynon esiste. Ciò significa che il nuovo proxy che sto cercando di generare non viene generato automaticamente.


Taral, la tua istanza di Magento è impostata in modalità sviluppatore? In caso contrario, è necessario compilare di per generare il proxy.
Ivan Chepurnyi,

Perché aggiungi metodi a questa classe?
KAndy,

Ivan, la mia istanza di magento è in modalità sviluppatore
Taral Patoliya,

@KAndy Devo aggiungere la funzionalità esatta come prodotti correlati, quindi per farlo, devo aggiungere alcuni metodi per il nuovo tipo di collegamento. come ho notato, ogni tipo di collegamento (relativo, cross_sell, up-sell) ha i propri metodi in quella classe.
Taral Patoliya,

non puoi semplicemente creare la classe proxy a mano e set in di.xmluna preferenza per \Magento\Catalog\Model\Product\Link\Proxya Package\Module\Model\Class\Proxy?
Marius

Risposte:


5

Dopo aver letto i commenti in cui hai dichiarato:

Ho fatto una cosa simile e ha funzionato. Mi sono risolto con quella soluzione. ma volevo generare una nuova classe proxy che includesse nuovi metodi. Poiché la classe proxy viene utilizzata per ridurre il carico di inizializzazione della classe. ora che la classe proxy non viene più utilizzata, la classe originale richiederà un po 'più di carico sul server. ma penso che sia trascurabile.

L'intero problema che stai cercando di risolvere, può essere fatto in modo più elegante e meno doloroso per l'aggiornamento.

Se hai appena aggiunto nuovi metodi all'implementazione esistente significa che non stai modificando il comportamento della classe originale

  1. Dovresti evitare di estendere i metodi pubblici della classe esistente a favore della creazione della tua classe che utilizza quella originale come dipendenza
  2. Quindi passa la lezione nel luogo in cui ne stavi usando una originale

Questo ti dà tali vantaggi collaterali:

  1. Si codifica più facilmente per testarlo (singola dipendenza sul deridere tutte le dipendenze core)
  2. Non viola il principio della singola responsabilità
  3. Non influisce sul core in luoghi che non ti aspetti
  4. Disaccoppia la logica di business dall'implementazione di base

2

Sono riuscito a generare il Proxy.phpfile corretto che includeva la mia nuova funzione aggiungendo quanto segue al mio modulodi.xml

<type name="Magento\Catalog\Model\Product">
    <arguments>
        <argument name="productLink" xsi:type="object">Package\Module\Model\Product\Link\Proxy</argument>
    </arguments>
</type>

Grazie @minlare per l'aiuto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.