Fonte de dados: File


1Apresentação

O Temma pode usar uma árvore de arquivos como fonte de dados. Isso pode ser útil para configurar rapidamente uma solução de armazenamento, que poderá depois ser substituída por um banco de dados relacional, um banco de dados não relacional, ou um armazenamento de arquivos terceirizado.

Se você configurou corretamente os parâmetros de conexão, o Temma cria automaticamente um objeto do tipo \Temma\Datasources\File. Por convenção, vamos considerar que você nomeou essa conexão file no arquivo etc/temma.php (veja a documentação de configuração).

A conexão fica então disponível no controlador ao escrever:

$file = $this->file;

Em outros objetos gerenciados pelo componente de injeção de dependências, a conexão com o sistema de arquivos pode ser acessada ao escrever:

$file = $loader->dataSources->file;
$file = $loader->dataSources['file'];

2Configuração

No arquivo etc/temma.php (veja a documentação de configuração), você declara o DSN (Data Source Name) que define a árvore de arquivos a ser usada.

O DSN usado para definir uma árvore de arquivos é: file://[UMASK]CAMINHO
O umask é opcional e é escrito em forma octal, começando com um zero. Se não for definido, o umask padrão do sistema é usado.

Exemplos:

  • file:///var/data/temma
  • file://0777/var/data/temma

3Chamadas unificadas

3.1Acesso como array

// verificação da existência de um dado
if (isset($file['path/key1']))
    doSomething();

// leitura de dados (desserializados)
$data = $file['path/key1'];

// escrita de dados (serializados)
$file['path/key1'] = $value;

// exclusão de dados
unset($file['path/key1']);

// número de arquivos
$cnt = count($file);

3.2Métodos gerais

// verificação da existência de um dado
if ($file->isSet('user/1'))
    doSomething();

// exclusão de um dado
$file->remove('user/1');

// exclusão de vários dados
$file->mRemove(['user/1', 'user/2', 'user/3']);

// exclusão de dados a partir de uma máscara
$file->clear('user/*');

// exclusão de todos os dados
$file->flush();

3.3Gerenciamento de dados serializados complexos

// busca de arquivos que correspondem a uma máscara
$users = $file->search('user/*');

// busca de chaves a partir de uma máscara, com recuperação dos dados (desserializados)
$users = $file->search('user/*', true);

// busca paginada (10 resultados a partir do 20º)
$users = $file->search('user/*', true, 20, 10);

// leitura de dados (desserializados)
$user = $file->get('user/1');
// leitura de dados com valor padrão
$color = $file->get('color', 'blue');
// leitura de dados com criação de dados se necessário
$user = $file->get("user/$userId", function() use ($userId) {
    return $this->dao->get($userId);
});

// leitura de vários dados (desserializados)
$users = $file->mGet(['user/1', 'user/2', 'user/3']);

// escrita de dados (serializados)
$file->set('user/1', $userData);
// escrita de dados (serializados) com direitos de acesso específicos
$file->set('user:1', $userData, 0600);

// escrita de vários dados (serializados)
$file->mSet([
    'user/1' => $user1data,
    'user/2' => $user2data,
    'user/3' => $user3data,
]);
// escrita de vários dados, com direitos de acesso específicos
$file->mSet([
    'user/1' => $user1data,
    'user/2' => $user2data,
], 0750);

3.4Gerenciamento de dados brutos

// leitura de dados (brutos)
$html = $file->read('page/home');
// leitura de dados com valor padrão
$html = $file->read('page/home',
                    '<html><body><h1>Homepage</h1><body><html>');
// leitura de dados com criação de dados se necessário
$html = $file->read('page/home', function() {
    return file_get_contents('/path/to/homepage.html');
});

// leitura de vários dados (brutos)
$pages = $file->mRead(['page/home', 'page/admin', 'page/products']);

// cópia de um dado para um arquivo local
$file->copyFrom('page/home', '/path/to/newpage.html');
// cópia de um dado para um arquivo local, com valor padrão
$file->copyFrom('page/home', '/path/to/newpage.html', $defaultHtml);
// cópia de um dado para um arquivo local, com criação de dados se necessário
$file->copyFrom('page/home', '/path/to/newpage.html', function() {
    return file_get_contents('/path/to/oldpage.html');
});
// cópia de um dado para um arquivo local, com criação de dados se necessário
// (com uma duração de vida de uma hora)
$file->copyFrom('page/home', '/path/to/newpage.html', function() {
    return file_get_contents('/path/to/oldpage.html');
}, 3600);

// escrita de dado (bruto)
$file->write('color/blue', '#0000ff');
// escrita de dado (bruto) com direitos de acesso específicos
$file->write('color/blue', '#0000ff', 0660);

// escrita de vários dados (brutos)
$file->mWrite([
    'color/blue'  => '#0000ff',
    'color/red'   => '#ff0000',
    'color/green' => '#00ff00',
]);
// escrita de vários dados (brutos) com direitos de acesso específicos
$file->mWrite([
    'color/blue'  => '#0000ff',
    'color/red'   => '#ff0000',
], 0600);

// escrita de dado (bruto) a partir de um arquivo local
$file->copyTo('page/home', '/path/to/homepage.html');
// escrita de dado (bruto) a partir de um arquivo local, com direitos de acesso específicos
$file->copyTo('page/home', '/path/to/homepage.html', 0600);

// escrita de vários dados (brutos) a partir de arquivos locais
$file->mCopyTo([
    'page/home'     => '/path/to/homepage.html',
    'page/admin'    => '/path/to/admin.html',
    'page/products' => '/path/to/products.html',
]);
// escrita de vários dados a partir de arquivos locais com uma duração de vida de uma hora
$file->mCopyTo([
    'page/home'  => '/path/to/homepage.html',
    'page/admin' => '/path/to/admin.html',
], 3600);