[ 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/produts/' . 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!

Deixe uma resposta

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.