Domanda

Forse mi sfugge un punto, ma mi sto solo chiedendo perché a volte c'è un'istruzione "use" per una classe specifica e talvolta no.

Esempio: app\code\Magento\Email\Model\Template.php, abbiamo nella parte superiore del file:

namespace Magento\Email\Model;

use Magento\Store\Model\ScopeInterface;
use Magento\Store\Model\StoreManagerInterface;

Poi nel __construct metodo abbiamo i seguenti parametri:

public function __construct(
    \Magento\Framework\Model\Context $context,
    \Magento\Framework\View\DesignInterface $design,
    \Magento\Framework\Registry $registry,
    \Magento\Store\Model\App\Emulation $appEmulation,
    StoreManagerInterface $storeManager,
    \Magento\Framework\View\Asset\Repository $assetRepo,
    \Magento\Framework\Filesystem $filesystem,
    \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
    \Magento\Email\Model\Template\Config $emailConfig,
    \Magento\Email\Model\TemplateFactory $templateFactory,
    \Magento\Framework\Filter\FilterManager $filterManager,
    \Magento\Framework\UrlInterface $urlModel,
    \Magento\Email\Model\Template\FilterFactory $filterFactory,
    array $data = []
)

Quindi possiamo vederlo chiaramente come abbiamo chiamato use Magento\Store\Model\StoreManagerInterface; al primo posto della classe, siamo in grado di farlo StoreManagerInterface $storeManager nei parametri del costruttore.

Le mie domande sono:

  • Perché lo facciamo solo per una lezione?
  • Perché non possiamo aggiungere a use per ogni classe del costruttore in modo da non dover digitare l'intero percorso della classe?
  • O viceversa, perché non ci liberiamo di use istruzione e digitare il percorso completo StoreManagerInterface classe ?
È stato utile?

Soluzione

Non c'è motivo tecnico per preferire uno sopra l'altro, tranne se ci sono dei conflitti di nome (come le diverse classi "context").Ma quelli possono essere risolti con gli alias ed è quello che faccio di solito:

use Magento\Framework\Model\Context as ModelContext;
.

I Assumi Nel corso dei principali metodi, in particolare i costruttori, sono stati generati da strumenti come lo strumento di conversione in prima e poi in seguito non modificato per utilizzare le importazioni "Usa".

Quindi suggerirei che nel tuo codice importiamo sempre le classi con "use" per rendere il codice effettivo meno verboso e più leggibile.

Altri suggerimenti

L'utilizzo dipende dalla situazione specifica.Il mio approccio è:

Classe menzionata solo una volta all'interno di un file - FQN

Partire nome completo.Ciò migliora la leggibilità perché non è necessario guardare utilizzo nuovamente la sezione.

Nome della classe utilizzato più volte - importare

Mettilo in a utilizzo sezione.Ciò rende il codice più breve dove viene menzionata la classe.

Classe usata una volta ma ho bisogno di una breve notazione - importare

Meglio spiegare con un esempio.

FQN

$collection->getSelect()
           ->joinInner(['campaign_products' => $subSelect],
               'campaign_products.product_id = e.entity_id',
               [self::FIELD_SORT_ORDER => "IFNULL(IF(0 = " . \Custome\Module\Api\Data\ProductListInterface::SORT_ORDER . ", NULL, " . \Custome\Module\Api\Data\ProductListInterface::SORT_ORDER . "), {$defaultSortValue})"]
           );

importare

$collection->getSelect()
           ->joinInner(['campaign_products' => $subSelect],
               'campaign_products.product_id = e.entity_id',
               [self::FIELD_SORT_ORDER => "IFNULL(IF(0 = " . ProductListInterface::SORT_ORDER . ", NULL, " . ProductListInterface::SORT_ORDER . "), {$defaultSortValue})"]
           );

Secondo me il 2° esempio è più facile da leggere.(Ma onestamente preferirei usare variabili invece di costanti qui per dargli ancora più leggibilità.)

Interfacce API Magento 2

È presente un avviso relativo agli endpoint API M2 esposti automaticamente.Nelle interfacce utilizzate per i metodi REST/SOAP è necessario utilizzare sempre gli FQN.

Le annotazioni vengono analizzate dal Magento Framework per determinare come convertire i dati da e verso JSON o XML.

Le importazioni di classi (ovvero le istruzioni d'uso sopra la classe) non vengono applicate!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top