Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Silex y error al ejecutar la consola

18 de febrero de 2015

Buenas tardes:

Lo primero, dar la enhorabuena por el portal y su magnífica labor. Ahora al tema de la consulta ;) El caso es que estoy empezando con Silex y al ejecutar la consola para generar las entidades vía doctrine, me devuelve el siguiente mensaje: Could not open input file: console

Estoy utilizando la versión de Fabien Potencier, skeleton.

Muchas gracias.

Saludos.


Respuestas

#1

Lo primero, muchas gracias por tus comentarios sobre este sitio.

Con respecto a tu pregunta: me resulta raro que vayas a generar las entidades de Doctrine con el skeleton de Fabien. El motivo es que Silex sólo incluye el proyecto DBAL de Doctrine, por lo que ni puedes generar las entidades ni puedes usarlas aunque las generes a mano. La única solución sería utilizar alguno de los service providers no oficiales que existen para silex y que permiten integrar el ORM de Doctrine.

Con respecto al error, si descartamos todos los errores básicos (no puedes ejecutar el comando php en la consola porque no lo tienes configurado en el PATH, el archivo consoleno existe o se ha movido a otro directorio, etc.) la causa más probable del error es que no tengas permisos para ejecutar ese archivo. No nos dices el sistema operativo que usas, pero si es Linux o Mac OS X, puedes ejecutar directamente el siguiente comando para hacer que el archivo console se pueda ejecutar:

$ chmod +x console

@javiereguiluz

18 febrero 2015, 17:03
#2

Hola de nuevo:

Aunque estoy usando el skeleton de Fabien Potencier, he agregado nuevos providers siguiendo un tutorial de Asier Marqués: Silex con Doctrine DBAL y ORM, así que he incluido los siguientes proveedores:

  • doctrine/dbal
  • symfony/doctrine-bridge
  • dflydev/doctrine-orm-service-provider

En cuanto al sistema, es Windows 7, y tengo en principio todo configurado, porque, de hecho, en otras pruebas que he hecho con Symfony, he podido utilizar sin ningún problema la consola.

He probado a invocar directamente al fichero mediante:

$ php console.php

y en este caso, el error que me devuelve es el siguiente:

Fatal error: Class 'Symfony\Component\Console\Application' not found in 
E:\Silex\src\console.php on line 9
 
Call Stack:
    0.0250     122440   1. {main}() E:\PHP\WF\MAI_Silex\src\console.php:0

El fichero console.php tiene el siguiente contenido:

<?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;
 
$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
    })
;
 
return $console;

No sé si faltaría algo más de información, con lo que sea, la facilito.

Muchas gracias de nuevo.

@jesusjbm

18 febrero 2015, 19:19
#3

Me parece que ya se lo que puede estar pasando: estás ejecutando directamente el archivo src/console.php en vez del archivo binario bin/console.

Al igual que sucede con Symfony, Silex proporciona un archivo PHP ejecutable llamado console que es el punto de entrada de todos los comandos de la consola. Aunque internamente este archivo console llama al otro archivo console.php (lo mismo sucede en Symfony), es importante ejecutar solamente el primero.

El motivo es que el archivo bin/console es el que se encarga de activar la "carga automática de clases" de PHP mediante esta línea:

require_once __DIR__.'/../vendor/autoload.php';

Sin esa línea, PHP no sabe encontrar ninguna clase y por eso te está dando error en la primera línea que intenta cargar una clase:

use Symfony\Component\Console\Application;
 
// ...
 
Fatal error: Class 'Symfony\Component\Console\Application' not found in 
E:\Silex\src\console.php on line 9

@javiereguiluz

18 febrero 2015, 22:45
#4

¡Muchas gracias! Efectivamente era eso.

Ya puedo ejecutar comandos desde la consola de Silex. No hay nada como saber.

Un saludo y gracias de nuevo.

@jesusjbm

18 febrero 2015, 23:36