Como pegar o Nome da pasta, URL’s e outros caminhos no Magento 2
Desenvolvimento, Magento 2
Atualizado em 28 de abril de 2020
Durante o desenvolvimento para Magento 2 é normal precisar obter caminhos de pastas, url’s de imagens, e outros caminhos físicos.
Neste artigo veremos como fazer isso de diversas formas e com vários exemplos.
Instanciando o DirectoryList
A classe responsável por nos fornecer a maioria dos diretórios e caminhos é a classe \Magento\Framework\Filesystem\DirectoryList
.
Uma vez instanciada você tem vários métodos úteis para obter praticamente qualquer caminho no Magento 2.
Idealmente você deve injetar a classe com o uso de injeção de dependência. Porém veremos duas formas de fazê-lo.
Via ObjectManager (não recomendável)
Embora não seja recomendado, esta é uma forma de chegar ao resultado.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $directory = $objectManager->get('\Magento\Framework\Filesystem\DirectoryList'); echo $rootPath = $directory->getRoot();
O exemplo acima exibirá o caminho da pasta raíz do Magento. Ex: /var/www/html
.
Via Injeção de Dependência
protected $_dir; ... public function __construct( ... \Magento\Framework\Filesystem\DirectoryList $dir, ... ) { ... $this->_dir = $dir; ... }
Se você não está familiarizado(a) com Injeção de Dependência e outros recursos do Magento 2, considere se inscrever no Magento 2: O Curso.
Outros diretórios e paths
Ainda usando o DirectoryList
em $_dir
, podemos fazer:
$this->_dir->getRoot(); // Resultado: /var/www/html/meumagento $this->_dir->getPath('media'); // Resultado: /var/www/html/meumagento/pub/media $this->_dir->getPath('pub'); // Resultado: /var/www/html/meumagento/pub $this->_dir->getPath('static'); // Resultado: /var/www/html/meumagento/pub/static $this->_dir->getPath('var'); // Resultado: /var/www/html/meumagento/var $this->_dir->getPath('app'); // Resultado: /var/www/html/meumagento/app $this->_dir->getPath('etc'); // Resultado: /var/www/html/meumagento/app/etc $this->_dir->getPath('lib_internal'); // Resultado: /var/www/html/meumagento/lib/internal $this->_dir->getPath('lib_web'); // Resultado: /var/www/html/meumagento/lib/web $this->_dir->getPath('tmp'); // Resultado: /var/www/html/meumagento/var/tmp $this->_dir->getPath('cache'); // Resultado: /var/www/html/meumagento/var/cache $this->_dir->getPath('log'); // Resultado: /var/www/html/meumagento/var/log $this->_dir->getPath('session'); // Resultado: /var/www/html/meumagento/var/session $this->_dir->getPath('setup'); // Resultado: /var/www/html/meumagento/setup/src $this->_dir->getPath('di'); // Resultado: /var/www/html/meumagento/var/di $this->_dir->getPath('upload'); // Resultado: /var/www/html/meumagento/pub/media/upload $this->_dir->getPath('generation'); // Resultado: /var/www/html/meumagento/var/generation $this->_dir->getPath('view_preprocessed'); // Resultado: /var/www/html/meumagento/var/view_preprocessed $this->_dir->getPath('composer_home'); // Resultado: /var/www/html/meumagento/var/composer_home $this->_dir->getPath('html'); // Resultado: /var/www/html/meumagento/var/view_preprocessed/html
E pra pegar URL’s?
O nosso DirectoryList
também nos ajuda nesta tarefa. Neste caso usaremos o método getUrlPath
ao invés de getPath
. Só precisamos passar o nome da pasta que queremos (media, pub, var, static, tmp, cache, log, etc).
Todos os nomes disponíveis são constantes de outra classe: a \Magento\Framework\App\Filesystem\DirectoryList
(ver classe no Github). Note que há um \App
ali no meio. Não é a mesma classe.
Exemplos:
- Pasta media:
$this->_dir->getUrlPath(\Magento\Framework\App\Filesystem\DirectoryList::
MEDIA
)
- Pasta pub:
$this->_dir->getUrlPath(\Magento\Framework\App\Filesystem\DirectoryList::
PUB
)
- Pasta static:
$this->_dir->getUrlPath(\Magento\Framework\App\Filesystem\DirectoryList::STATIC_VIEW
)
)
Algumas constantes não estarão disponíveis no método getUrlPath
, pois correspondem à pastas de sistema. Sendo assim, elas só podem ser usadas com getPath
. Ex: \Magento\Framework\App\Filesystem\DirectoryList::SESSION
E se for uma url diferente? Onde está o getUrl?
Eventualmente você quer chamar uma url específica, como checkout/onepage/success
. Neste caso, o getUrlPath
do DirectoryList
não ajudará muito.
Para estes casos faremos uso do \Magento\Framework\UrlInterface
.
Nele você tem o método getUrl
que ainda permite passar os parâmetros da rota, exatamente como no Magento 1.
class Magenteiro { /** * @var \Magento\Framework\UrlInterface */ protected $_urlBuilder; public function __construct( \Magento\Framework\UrlInterface $_urlBuilder ) { $this->_urlBuilder = $context->getUrlBuilder(); } public function exemplo() { return $this->_urlBuilder->getUrl('checkout/onepage/success'); }
Dica: se você estiver dentro de um Helper, é provável que você esteja estendendo \Magento\Framework\App\Helper\AbstractHelper
. Neste caso, você já terá o Url Builder dentro de $this->_urlBuilder
.
Conclusão
Como podemos ver, o UrlBuilder
é como o equivalente do Mage::getUrl
que tínhamos no Magento 1.
Com ele podemos obter caminhos de URL’s dentro do Magento 2. Se quisermos diretórios, então usamos o DirectoryList
.
No Magento 2 também não temos uma classe mãe que podemos chamar em qualquer lugar e levando as boas práticas em consideração. Por isso o melhor jeito é se referir a ela com injeção de dependência como fizemos aqui.
Bônus: Aula de Dependency Injection (grátis)
Receba 3 aulas do curso de Magento 2 aqui do Magenteiro em seu e-mail. No primeiro dia você receberá acesso à aula sobre Injeção de dependência, o que tornará este artigo ainda mais claro.
Referências: StackOverflow e Alan Storm
- PagSeguro (PagBank) para Magento 1 recebe a Nova Geração - 9 de abril de 2024
- Recorrência no WooCommerce Sem Plugins Pagos - 28 de janeiro de 2024
- Chargeback. O que é, e como se livrar deles. - 19 de dezembro de 2023
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/magento-2/obter-urls-paths-magento-2/"]