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
- Guest checkout bloqueado na API REST do Magento 2? Confira isso. - 7 de julho de 2026
- Você precisa testar esta plataforma de e-commerce - 9 de fevereiro de 2026
- A hora de montar o seu OnlyFans chegou! Veja 8 ideias pra começar o seu. - 4 de dezembro de 2024
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/magento-2/obter-urls-paths-magento-2/"]