Symfony 2.8 : Obtenga el comando del mensaje usando el procesador en el controlador

Tengo un archivo de gestión de datos añadir base de datos. Uso el documento Symfony 2.8 Process para el manejo en el controlador. Todo estaba funcionando bien. Pero tengo un error. En el comando de archivo uso if-else para comprobar los datos. Cuando se procesa y se ejecuta $process->run() , No puedo obtener el error en else (en otro lugar. Uso echo para mostrar el error).

if (!empty($id)) {
  // handling code
} else {
 echo "not found Id"
}

¿Tienes alguna idea? ¡Ayúdenme, por favor!

Documento i uso : https://symfony.com/doc/current/components/process.html

Pregunta hecha hace 3 años, 4 meses, 26 días - Por scriptsorcerer


3 Respuestas:

  • Normal puede obtener la salida del proceso utilizando: echo $process->getOutput(); o en su caso usted puede lanzar la excepción como

    if (!empty($id)) {
        // handling code
    } else {
        throw new \Exception('Id not found');
    }
    

    y poner su proceso dentro de tratar bloque de captura como ese

    try {
        $process->mustRun();
    
        echo $process->getOutput();
    } catch (\Exception $exception) {
        echo $exception->getMessage();
    }
    

    Respondida el Dec 21, 2020 a las 03:41 - por devgeek

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando puede deberse a que al ejecutar $process->run() el error generado no se muestra ni se captura en el mismo contexto donde se encuentra tu if-else en el controlador. Para poder capturar y mostrar errores generados durante la ejecución del comando, puedes hacer lo siguiente:

    • Utiliza `getOutput()` y `getErrorOutput()` para capturar tanto la salida como los errores del proceso. Puedes modificar tu código de la siguiente manera:
    php
    if (!empty($id)) {
        // handling code
    } else {
        echo "not found Id";
        if ($process->isSuccessful()) {
            echo "Process output: " . $process->getOutput();
        } else {
            echo "Process error: " . $process->getErrorOutput();
        }
    }
    
    • También puedes utilizar la excepción `ProcessFailedException` para capturar y gestionar los errores. Por ejemplo:
    php
    use Symfony\Component\Process\Exception\ProcessFailedException;
    
    try {
        $process->mustRun();
        // handling code
    } catch (ProcessFailedException $exception) {
        echo "Error executing process: " . $exception->getMessage();
        echo "Error output: " . $exception->getProcess()->getErrorOutput();
    }
    

    Al capturar los errores de esta manera, podrás visualizar de manera más clara cualquier mensaje de error que se genere durante la ejecución del comando en el controlador. Espero que esta información te sea de ayuda.

    Respondida el Dec 22, 2020 a las 03:42 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema aquí es que después de que el proceso se ejecuta correctamente, el código de retorno será 0 y no entrará en la rama else. Para resolver este problema, puedes utilizar el método isSuccessful() del objeto Process para comprobar si el proceso se ejecutó correctamente:

    php
    if ($process->isSuccessful()) {
      // handling code
    } else {
      echo "not found Id";
    }
    

    El método isSuccessful() devuelve true si el proceso se ejecutó correctamente y false en caso contrario. De esta manera, puedes comprobar el estado de ejecución del proceso y manejar los errores en consecuencia.

    Respondida el Dec 22, 2020 a las 03:48 - por Gemini

    Votos positivos: 0 | Votos negativos: 0