OG Framework
OG Framework Documentação
Voltar para Documentação

System

Filesystem System

Abstração poderosa para gestão de ficheiros, oferecendo métodos seguros e normalizados para I/O, gestão de diretórios e downloads.

Introdução

O OfficeGest possui uma camada de abstração localizada em Modules/Common/Filesystem/. A interação principal é feita através da Facade File, que simplifica operações comuns e garante segurança.

Arquitetura do Sistema

Client Code File::put() File Facade Proxy Class Filesystem (Singleton) I/O Operations Directory Mgmt DownloadManager

Recuperar e Guardar Ficheiros

File::get($path)

Recupera o conteúdo de um ficheiro. Lança exceção se não existir.

try {
    $conteudo = File::get('/caminho/para/arquivo.txt');
} catch (\Exception $e) {
    // Ficheiro não existe
}

File::put($path, $contents, $permissions)

Grava conteúdo. Cria diretórios automaticamente se não existirem.

// Cria pasta 'logs/2024/' automaticamente
File::put('logs/2024/erro.log', 'Conteúdo do log');

// Com permissões específicas (0755)
File::put('scripts/executavel.sh', '#!/bin/bash...', 0755);

File::delete($path)

Remove ficheiro do sistema.

File::fileExists($path)

Verifica se existe (bool).

File::copy($from, $to)

Copia criando pastas destino.

Gestão de Diretórios

File::ensureDirectoryExists($path)

Garante existência, cria se necessário.

File::ensureDirectoryExists('storage/uploads/2024');
File::makeDirectory($path, $mode, $recursive)

Criação com controlo total.

File::makeDirectory('a/b/c', 0755, true);

Streams e Downloads

Métodos otimizados para evitar carregar ficheiros grandes para a memória RAM.

// 1. Escrever Stream em Disco (útil para uploads grandes)
$stream = fopen('php://temp', 'r+');
// ... escrever no stream ...
rewind($stream);
File::writeStream($stream, 'storage/big_file.dat');

// 2. Download para Browser via Stream (sem carregar tudo em memória)
public function export() {
    $stream = fopen('php://memory', 'r+');
    fputcsv($stream, ['ID', 'Nome']);
    rewind($stream);
    
    File::streamDownload('export.csv', $stream, 'text/csv');
}

Facade API

Método Retorno Descrição
get($path) string Conteúdo do ficheiro
put($path, $content) bool Grava conteúdo (cria dirs auto)
delete($path) bool Apaga ficheiro
ensureDirectoryExists void Cria diretório se não existir

Exemplos Práticos

1. Cache de Rotas (JSON)

Leitura e escrita segura de JSON.

public function saveRouteCache(array $routes): void
{
    // Grava e subscreve o ficheiro de cache
    File::put('bootstrap/cache/routes.json', json_encode($routes));
}

2. Geração de Código (Stubs)

Uso extensivo em comandos CLI.

if (File::fileExists($path)) {
    throw new \Exception("Action já existe!");
}

File::ensureDirectoryExists(dirname($path));
$stub = File::get(__DIR__.'/stubs/action.stub');
File::put($path, str_replace('{{class}}', $name, $stub));

3. QueueMaster Crash Recovery

Escrita de dumps de emergência.

// O método put encarrega-se de criar a pasta 'storage/crash_dumps/'
File::put('storage/crash_dumps/' . date('Y-m-d') . '.json', $json);