Advertisement
  1. Code
  2. PHP

Cómo usar el componente Filesystem de Symfony

Scroll to top
Read Time: 5 min

Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)

En este artículo, vamos a explorar el componente Filesystem de Symfony, que proporciona métodos útiles para interactuar con un sistema de archivos. Después de su instalación y configuración, crearemos algunos ejemplos reales sobre cómo usarlo.

El componente Filesystem de Symfony

Si estás trabajando con aplicaciones PHP, con mucha frecuencia necesitarás interactuar con un sistema de archivos. En la mayoría de los casos terminas ya sea usando las funciones principales de PHP o creando tus propias clases contenedoras personalizadas para lograr la funcionalidad deseada. De cualquier manera, esto es difícil de mantener durante un período de tiempo más largo. Entonces, lo que necesitas es una biblioteca con buen mantenimiento y fácil de usar. Ahí es donde entra el componente Filesystem de Symfony.

El componente Filesystem de Symfony proporciona útiles métodos contenedores que permiten que la interacción con el sistema de archivos sea muy fácil y divertida. Veamos rápidamente de lo que es capaz:

  • crear un directorio
  • crear un archivo
  • editar el contenido de un archivo
  • cambiar el propietario y el grupo de un archivo o directorio
  • crear un enlace simbólico (o symlink)
  • copiar un archivo o directorio
  • eliminar un archivo o directorio
  • y más

En este artículo, te enseñaré cómo desatar el poder del componente Filesystem de Symfony. Como de costumbre, comenzaremos con las instrucciones para la instalación y la configuración, y luego implementaremos algunos ejemplos reales para demostrar los conceptos clave.

Instalación y configuración

En esta sección vamos a instalar el componente Filesystem de Symfony. Voy a suponer que ya has instalado Composer en tu sistema, ya que lo necesitaremos para instalar el componente Filesystem disponible en Packagist.

Así que sigue adelante e instala el componente Filesystem usando el comando a continuación.

1
$composer require symfony/filesystem

Eso debería haber creado un archivo composer.json, que debería verse así:

1
{
2
    "require": {
3
        "symfony/filesystem": "^4.1"
4
    }
5
}

Esa es la parte de la instalación, pero ¿cómo se supone que debes usar esto? De hecho, es solo cuestión de incluir el archivo autoload.php creado por Composer en tu aplicación, como se muestra en el siguiente fragmento de código.

1
<?php
2
require_once './vendor/autoload.php';
3
4
// application code

5
?>

Un ejemplo real

En esta sección, crearemos un ejemplo que demuestra cómo puedes usar el componente Filesystem en tus aplicaciones para realizar varias operaciones en el sistema de archivos.

Para comenzar, vayamos y creemos el archivo index.php con el siguiente contenido.

1
<?php
2
require_once './vendor/autoload.php';
3
4
use Symfony\Component\Filesystem\Filesystem;
5
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
6
7
// init file system

8
$fsObject = new Filesystem();
9
$current_dir_path = getcwd();
10
11
// make a new directory

12
// create a new file and add contents

13
// copy a directory

14
// remove a directory

Aquí, hemos inicializado el objeto Filesystem en $fsObject y hemos guardado el directorio actual en $current_dir_path. En las próximas secciones, usaremos $fsObject para llevar a cabo diferentes operaciones.

Crea un nuevo directorio

Primero, crearemos un nuevo directorio.

1
//make a new directory

2
try {
3
    $new_dir_path = $current_dir_path . "/foo";
4
5
    if (!$fsObject->exists($new_dir_path))
6
    {
7
        $old = umask(0);
8
        $fsObject->mkdir($new_dir_path, 0775);
9
        $fsObject->chown($new_dir_path, "www-data");
10
        $fsObject->chgrp($new_dir_path, "www-data");
11
        umask($old);
12
    }
13
} catch (IOExceptionInterface $exception) {
14
    echo "Error creating directory at". $exception->getPath();
15
}

Aquí hemos usado el método exists para verificar si el directorio foo ya existe antes de crearlo.

A continuación, usamos el método mkdir para crear el directorio foo con los permisos 0775, lo que significa que todos pueden leerlo y ejecutarlo, pero solamente el propietario del archivo y su grupo pueden escribir en él. (Esta es la notación octal para los permisos del sistema de archivos; para obtener más información, consulta este desglose de la notación octal). Además, hemos usado los métodos chown y chgrp para cambiar el propietario y el grupo del directorio foo.

Crea un nuevo archivo y agrégale contenido

En esta sección, crearemos un archivo nuevo y agregaremos contenido a dicho archivo.

1
// create a new file and add contents

2
try {
3
    $new_file_path = $current_dir_path . "/foo/bar.txt";
4
5
    if (!$fsObject->exists($new_file_path))
6
    {
7
        $fsObject->touch($new_file_path);
8
        $fsObject->chmod($new_file_path, 0777);
9
        $fsObject->dumpFile($new_file_path, "Adding dummy content to bar.txt file.\n");
10
        $fsObject->appendToFile($new_file_path, "This should be added to the end of the file.\n");
11
    }
12
} catch (IOExceptionInterface $exception) {
13
    echo "Error creating file at". $exception->getPath();
14
}

Aquí, hemos usado el método touch para crear un archivo nuevo y luego usamos chmod para establecer sus permisos en 0777: legible, editable y ejecutable globalmente.

Una vez creado el archivo, puedes usar el método dumpFile para agregar contenido a dicho archivo. Por otro lado, si quieres agregar contenido al archivo ya existente, puedes usar el método appendToFile, como se muestra en el ejemplo anterior.

Copia un directorio

Hasta ahora, hemos creado el directorio foo y el archivo bar.txt usando el objeto $fsObject. En esta sección veremos cómo copiar un directorio junto con su contenido.

1
//copy a directory

2
try {
3
    $src_dir_path = $current_dir_path . "/foo";
4
    $dest_dir_path = $current_dir_path . "/foo_copy";
5
6
    if (!$fsObject->exists($dest_dir_path))
7
    {
8
        $fsObject->mirror($src_dir_path, $dest_dir_path);
9
    }
10
} catch (IOExceptionInterface $exception) {
11
    echo "Error copying directory at". $exception->getPath();
12
}

Como puedes ver, primero creamos los nombres de las rutas usando la concatenación de cadenas. Luego, una vez que nos aseguramos de que el directorio no existía usando el método exists, usamos el método mirror para copiar el directorio foo en el directorio foo_copy.

Elimina un directorio

Finalmente, veamos cómo eliminar un directorio.

1
//remove a directory

2
try {
3
    $arr_dirs = array(
4
        $current_dir_path . "/foo",
5
        $current_dir_path . "/foo_copy"
6
    );
7
8
    $fsObject->remove($arr_dirs);
9
} catch (IOExceptionInterface $exception) {
10
    echo "Error deleting directory at". $exception->getPath();
11
}

Nuevamente, es bastante sencillo: para eliminar un directorio, simplemente debes usar el método remove.

Puedes encontrar el código completo para index.php en nuestro repositorio de GitHub.

Conclusión

Esa es una breve introducción al componente Filesystem de Symfony. El componente Filesystem de Symfony proporciona métodos que facilitan mucho la interacción con un sistema de archivos. Vimos cómo instalar el componente, y creamos un puñado de ejemplos para demostrar varios aspectos del mismo.

Espero que hayas disfrutado este artículo, ¡y no dudes en publicar lo que piensas usando el canal a continuación!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.