Cómo borrar la caché con la CLI en un proyecto Silex

Cómo borrar la caché con la CLI en un proyecto Silex

Para un desarrollador que ya trabaja con Symfony y de repente tiene que trabajar con un proyecto basado en Silex, aunque la mayoría de las cosas son iguales, obviamente hay cosas que no. Una de las tareas más tediosas en Silex, por ejemplo cuando implementas Twig es la necesidad de borrar la caché, sin embargo esto debe hacerse manualmente, eliminando el contenido de la carpeta /cache. Como se mencionó, si vienes de un entorno Symfony puro, sabrás que ya hay un comando CLI en el proyecto, es decir, cache:clear que hace esto por ti. Silex no tiene tal función, sin embargo, puedes implementarla por ti mismo, por lo que no tendrás que eliminar el contenido de la carpeta de caché tu mismo manualmente cada vez que estés fuera del entorno de desarrollo.

En este artículo, te mostraremos cómo agregar fácilmente el comando cache:clear a su aplicación Silex.

Importante

En este tutorial asumimos que ya implementó el archivo console.php para silex donde puede registrar nuevos comandos de consola, en caso de que no lo hayas hecho, consulta el componente de consola de Symfony para obtener más información.

1. Crea el comando: cache-clear

Te proporcionaremos el comando para borrar la carpeta de caché de tu proyecto Silex, sin embargo, necesitas saber cómo cargar el comando en tu aplicación. Esto generalmente se hace (siguiendo la estructura predeterminada de Silex Skeleton) en el archivo console.php de tu proyecto, donde ya deberías encontrar una Aplicación de Consola Symfony. Si no es así, puedes crearlo. El siguiente ejemplo agrega el comando cache:clear que crea una aplicación de consola básica en el archivo console.php:

<?php

// src/console.php

use Symfony\Component\Console\Application;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Finder\Finder;

// Tu aplicación, esto es solo un ejemplo de inicialización, esto debería ser diferente en tu aplicación ...
$console = new Application('My Silex Application', 'n/a');
$console->getDefinition()->addOption(new InputOption('--env', '-e', InputOption::VALUE_REQUIRED, 'The Environment name.', 'dev'));
$console->setDispatcher($app['dispatcher']);
$console
    ->register('my-command')
    ->setDefinition(array(
        // new InputOption('some-option', null, InputOption::VALUE_NONE, 'Some help'),
    ))
    ->setDescription('My command description')
    ->setCode(function (InputInterface $input, OutputInterface $output) use ($app) {
        // do something
    })
;

// Registre el comando: cache-clear !
$console
->register('cache:clear')
->setDescription('Borra la caché')
->setCode(function (InputInterface $input, OutputInterface $output) use ($app) {
    if (!isset($app['cache.path']))
    {
         $output->writeln(sprintf("<error>ERROR:</error> No se pudo borrar la caché: <info>\$app['cache.path']</info> no está configurado.", 'cache:clear'));
         return false;
    }
    $cacheDir = $app['cache.path'];
    $finder = new Finder();
    $finder
        ->in($cacheDir)
        ->notName('.gitkeep')
    ;
    
    //--- from Filesystem::remove()
    $remove = function ($files, $recurse) {
        $files = iterator_to_array($files);
        $files = array_reverse($files);
        foreach ($files as $file) {
            if (!file_exists($file) && !is_link($file)) {
                continue;
            }
            if (is_dir($file) && !is_link($file)) {
                $recurse(new \FilesystemIterator($file), $recurse);
                if (true !== @rmdir($file)) {
                    throw new \Exception(sprintf('Failed to remove directory %s', $file));
                }
            } else {
                // https://bugs.php.net/bug.php?id=52176
                if (defined('PHP_WINDOWS_VERSION_MAJOR') && is_dir($file)) {
                    if (true !== @rmdir($file)) {
                        throw new \Exception(sprintf('Failed to remove file %s', $file));
                    }
                } else {
                    if (true !== @unlink($file)) {
                        throw new \Exception(sprintf('Failed to remove file %s', $file));
                    }
                }
            }
        }
    };
    
    $remove($finder, $remove);
    $output->writeln("Caché borrada con éxito!");
    return true;
})
;

return $console;

Guarde los cambios en el archivo y continúe con el siguiente paso.

2. Define la ruta de la caché de forma global

De lo contrario, encontrarás la excepción "ERROR: no se pudo borrar el caché: $app['cache.path'] no está configurado". si intentas ejecutar el comando sin seguir este paso. Para definir la propiedad cache.path, es posible que desees hacerlo en el archivo app.php de tu proyecto, simplemente asigna la nueva clave a la variable $app con la ruta a la carpeta de caché de tu proyecto Silex:

Nota

Según la estructura de su proyecto, la ruta puede cambiar, así que asegúrese de proporcionar la ruta correcta.

// Define la propiedad cache.path en el directorio de caché de su Proyecto Silex.
// app.php
$app['cache.path'] = __DIR__.'/../var/cache';

3. Prueba el comando

Como último paso, después de guardar los cambios, podrás ejecutar su comando desde tu terminal en la carpeta raíz de su proyecto:

php bin/console cache:clear

Una vez que ejecutes el comando desde la terminal, verá el mensaje "Caché correctamente borrado", asumiendo que todo salió bien.

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable