Categorias
Laravel

[ Laravel ] Como listar imagens da pasta public

Neste post irei demonstrar a elegância que o Laravel oferece para listarmos imagens de uma pasta usando o recurso glob.

O Laravel oferece algumas ferramentas bem legais para trabalharmos com arquivos e juntamente com alguns helpers poder criar uma listagem de imagens a partir de uma pasta facilmente.

Facade File

O Facade File possui o método glob que nos permite utilizá-lo exatamente como é feito com o método glob nativo do PHP. Se você nunca usou este método do PHP, não tem problemas, o recurso do Laravel retorna o mesmo resultado. Mas se voce ficou curioso acessa a documentação do PHP e veja exemplos.

Supondo que dentro da pasta public temos uma pasta images/produtos e queremos listas as imagens que estão dentro dela, é bem fácil! Bastaria escrever:

File::glob(public_path('imagens/produtos/*.*'));

e realizar uma iteração sobre o resultado:

@foreach(File::glob(public_path('imagens/produtos/*.*')) as $imagem) ?>
{{ $imagem}}
@endforeach ?>

Com isso você terá com resultado o caminho absoluto das imagens, o que não será exibido pelo navegador, então se você precisa exibir as imagens numa página HTML, basta fazer isso:

@foreach(File::glob(public_path('imagens/produtos/*.*')) as $imagem) ?>
{{ asset('imagens/produtos/' . basename($imagem)) }}
@endforeach ?>

e está tudo certo!

Se você quiser utilizar esse recurso dentro de controlador, por exemplo, e retornar pro view, você poderia fazer algo como:

...
use Illuminate\Support\Facades\File;
class ImagensController extends Controller
{
    public function index()
    {
        $imagens = array_map(function($imagem) {
            return '/imagens/produtos/' . basename($imagem);
        }, File::glob(public_path('imagens/produtos/*.*')));


        return view('imagens.index', [
            'imagens' => $imagens
        ]);
    }
}

Bom, é isso aí!

Como você pode ver é tão útil quanto fácil.

Espero que tenha gostado.

Abraço do Giba!

2 respostas em “[ Laravel ] Como listar imagens da pasta public”

amigo, da próxima vez, cheque o código antes de posta-lo. A repetição para exibir na view está faltando uma letra na pasta produtos.

@foreach(File::glob(public_path(‘imagens/produtos/*.*’)) as $imagem) ?>
{{ asset(‘imagens/produ-> ts

Que bom que você achou um erro, quer dizer que pelo menos você testou!
Sobre da próxima vez que eu postar algo, tem 998 posts no blog, obrigado por achar um “o” faltando!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *