Fuente de datos: File
1Presentación
Temma puede usar un árbol de archivos como fuente de datos. Esto puede ser útil para configurar rápidamente una solución de almacenamiento, que más adelante puede sustituirse por una base de datos relacional, una base de datos no relacional, o un almacenamiento de archivos externalizado.
Si has configurado correctamente los parámetros de conexión, Temma crea automáticamente un objeto de tipo \Temma\Datasources\File. Por convención, supondremos que has llamado a esta conexión file en el archivo etc/temma.php (consulta la documentación de configuración).
La conexión está entonces disponible en el controlador escribiendo:
$file = $this->file;
En otros objetos gestionados por el componente de inyección de dependencias, la conexión al archivo puede accederse escribiendo:
$file = $loader->dataSources->file;
$file = $loader->dataSources['file'];
2Configuración
En el archivo etc/temma.php (consulta la documentación de configuración), declaras el DSN (Data Source Name) que define el árbol de archivos que se va a usar.
El DSN usado para definir un árbol de archivos es: file://[UMASK]CAMINO
El umask es opcional y se escribe en forma octal,
comenzando por un cero. Si no se define, se usa el umask por defecto del sistema.
Ejemplos:
- file:///var/data/temma
- file://0777/var/data/temma
3Llamadas unificadas
3.1Acceso tipo array
// comprobación de la existencia de un dato
if (isset($file['path/key1']))
doSomething();
// leer datos (deserializados)
$data = $file['path/key1'];
// escritura de datos (serializados)
$file['path/key1'] = $value;
// eliminación de datos
unset($file['path/key1']);
// número de archivos
$cnt = count($file);
3.2Métodos generales
// comprobación de la existencia de un dato
if ($file->isSet('user/1'))
doSomething();
// eliminación de datos
$file->remove('user/1');
// eliminación de varios datos
$file->mRemove(['user/1', 'user/2', 'user/3']);
// eliminación de datos a partir de una máscara
$file->clear('user/*');
// eliminación de todos los datos
$file->flush();
3.3Gestión de datos serializados complejos
// búsqueda de archivos que coincidan con una máscara
$users = $file->search('user/*');
// búsqueda de claves a partir de una máscara, con recuperación de datos (deserializados)
$users = $file->search('user/*', true);
// búsqueda paginada (10 resultados a partir del vigésimo)
$users = $file->search('user/*', true, 20, 10);
// leer datos (deserializados)
$user = $file->get('user/1');
// leer datos con valor por defecto
$color = $file->get('color', 'blue');
// leer datos con creación de datos si es necesario
$user = $file->get("user/$userId", function() use ($userId) {
return $this->dao->get($userId);
});
// leer varios datos (deserializados)
$users = $file->mGet(['user/1', 'user/2', 'user/3']);
// escritura de datos (serializados)
$file->set('user/1', $userData);
// escritura (serializada) de datos con permisos de acceso específicos
$file->set('user:1', $userData, 0600);
// escritura de varios datos (serializados)
$file->mSet([
'user/1' => $user1data,
'user/2' => $user2data,
'user/3' => $user3data,
]);
// escritura de varios datos, con permisos de acceso específicos
$file->mSet([
'user/1' => $user1data,
'user/2' => $user2data,
], 0750);
3.4Gestión de datos en bruto
// leer datos (en bruto)
$html = $file->read('page/home');
// leer datos con valor por defecto
$html = $file->read('page/home',
'<html><body><h1>Homepage</h1><body><html>');
// leer datos con creación de datos si es necesario
$html = $file->read('page/home', function() {
return file_get_contents('/path/to/homepage.html');
});
// leer varios datos (en bruto)
$pages = $file->mRead(['page/home', 'page/admin', 'page/products']);
// copiar datos a un archivo local
$file->copyFrom('page/home', '/path/to/newpage.html');
// copiar datos a un archivo local, con valor por defecto
$file->copyFrom('page/home', '/path/to/newpage.html', $defaultHtml);
// copiar datos a un archivo local, con creación de datos si es necesario
$file->copyFrom('page/home', '/path/to/newpage.html', function() {
return file_get_contents('/path/to/oldpage.html');
});
// copiar datos a un archivo local, con creación de datos si es necesario
// (con una vida útil de una hora)
$file->copyFrom('page/home', '/path/to/newpage.html', function() {
return file_get_contents('/path/to/oldpage.html');
}, 3600);
// escritura de datos (en bruto)
$file->write('color/blue', '#0000ff');
// escritura de datos (en bruto) con permisos de acceso específicos
$file->write('color/blue', '#0000ff', 0660);
// escritura de varios datos (en bruto)
$file->mWrite([
'color/blue' => '#0000ff',
'color/red' => '#ff0000',
'color/green' => '#00ff00',
]);
// escritura de varios datos (en bruto) con permisos de acceso específicos
$file->mWrite([
'color/blue' => '#0000ff',
'color/red' => '#ff0000',
], 0600);
// escritura (en bruto) de datos a partir de un archivo local
$file->copyTo('page/home', '/path/to/homepage.html');
// escritura (en bruto) de datos a partir de un archivo local, con permisos de acceso específicos
$file->copyTo('page/home', '/path/to/homepage.html', 0600);
// escritura de varios datos (en bruto) a partir de archivos locales
$file->mCopyTo([
'page/home' => '/path/to/homepage.html',
'page/admin' => '/path/to/admin.html',
'page/products' => '/path/to/products.html',
]);
// escritura de varios datos a partir de archivos locales con una vida útil de una hora
$file->mCopyTo([
'page/home' => '/path/to/homepage.html',
'page/admin' => '/path/to/admin.html',
], 3600);