Magento2: ottieni l'URL multimediale nel file modello (senza Gestione oggetti chiamata diretta)


17

Come accedere Media URLal file modello? Tutta la soluzione che ho trovato chiama direttamente Object Manager. Un'altra mia preoccupazione, puoi mai chiamare il gestore oggetti direttamente come best practice? (perché nella maggior parte della soluzione stanno usando la gestione degli oggetti)

Risposte:


25

È possibile ottenere l'URL multimediale nel file modello utilizzando la modalità seguente, ma senza utilizzare objectmanager è necessario definire il file Block con il __construct()metodo con definire storeManagerInterface nel metodo di costruzione.

Nel tuo file di blocco phtml crea la funzione __construct.

public $ _storeManager;

public function __construct(\Magento\Store\Model\StoreManagerInterface $storeManager)
{
       $this->_storeManager = $storeManager;
}

Nel tuo file phtml chiama il metodo seguente per ottenere mediaurl,

$mediaUrl = $this ->_storeManager-> getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA );

echo $ mediaUrl;

Questo è il modo corretto per ottenere l'URL multimediale in Magento 2.


4
Penso che sarebbe meglio proteggere quella variabile e creare un metodo migliore per recuperare l'URL dei media
Raphael at Digital Pianism,

Se il blocco si estende da \Magento\Framework\View\Element\Template, hai già un'istanza di StoreManagerInterface( $this->_storeManager).
Erfan,

Ho ricevuto l'URL dei media. Ma ho bisogno di visualizzare l'immagine corrispondente a quell'URL ... Se sai aiutami a risolvere il mio problema. Si prega di fare riferimento al seguente link magento.stackexchange.com/questions/201961/…
Jaisa

14

A partire dalla versione 2.1, non esiste un modo diretto per ottenere l'URL multimediale senza:

  • chiamando direttamente il gestore oggetti (per favore non farlo)
  • sovrascrivere il blocco e aggiungere un nuovo metodo

Rakesh ha menzionato un modo per farlo.

Un altro modo è utilizzare la variabile protetta $_urlBuilderinclusa per ogni blocco come definito in AbstractBlock: https://github.com/magento/magento2/blob/f2d309a88298886460351c04973a4ff95c7a91c0/lib/internal/Magento/Framework/View/Element/AbstractBlock.php # L186

Quindi non devi modificare il costruttore del tuo blocco e puoi semplicemente aggiungere il seguente metodo:

public function getMediaUrl() {
    return $this->_urlBuilder->getBaseUrl(['_type' => UrlInterface::URL_TYPE_MEDIA]);
}

Quindi nel tuo modello puoi chiamare:

$block->getMediaUrl();

4
penso che sia assurdo che non riesco a recuperare direttamente il percorso multimediale in .phtml.
LucScu,

@LucScu potrebbe essere scoraggiato, di sicuro. Probabilmente non è la migliore idea per fare riferimento a una risorsa che è stata caricata e non fa parte della base di codice. È un po 'brutto farlo.
Erfan,

7

Se non vuoi preoccuparti di estendere \ Magento \ Framework \ View \ Element \ Template e vuoi che il tuo file .phtml usi il blocco \ Magento \ Framework \ View \ Element \ Template, allora puoi usare questa scorciatoia:

$this->helper('Magento\Cms\Helper\Wysiwyg\Images')->getBaseUrl()

L'uso di $ this-> helper () nei file PHTML è deprecato e scoraggiato
Vishwas Bhatnagar

5

Userò la risposta di Raphael e la estenderò, ma invece di aggiungere il metodo nella classe di blocco, perché non creare un helper e aggiungerlo lì?

Inizia creando un nuovo modulo nel solito modo, e nella radice, crea una nuova cartella chiamata "Helper" e aggiungi il codice richiesto:

namespace YourSite\YourModule\Helper;
use Magento\Framework\UrlInterface;
class Url extends \Magento\Framework\App\Helper\AbstractHelper
{
    public function getMediaPath() {
        return $this->_urlBuilder->getBaseUrl(['_type' => UrlInterface::URL_TYPE_MEDIA]);
    }

}

Una volta attivato e compilato, sarai in grado di utilizzarlo nel tuo file modello utilizzando il seguente metodo:

<?php $url = $this->helper('\YourSite\YourModule\Helper\Url'); ?>
<img src="<?php echo $url->getMediaPath() ?>wysiwyg/image.jpg" />

Spero che tu (e potenzialmente altri) lo trovi di grande utilità!


L'uso di $ this-> helper () nei file PHTML è deprecato e scoraggiato
Vishwas Bhatnagar

1

Almeno in 2.2.6, puoi usare Magento\Framework\UrlInterface::getDirectUrl()

    protected function buildMediaUrl($path)
    {
        return $this->urlBuilder->getDirectUrl( $path, ['_type' => UrlInterface::URL_TYPE_MEDIA]);
    }
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.