En el núcleo de Joomla todavía encuentro muchas llamadas como esta:
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode("\n", $errors));
return false;
}
Pero JError está en desuso desde la versión de plataforma 12.1. Entonces, ¿cómo debo usar las excepciones PHP estándar?
php
error-handling
jerror
Harald Leithner
fuente
fuente
Respuestas:
Como @DmitryRekun dijo, una buena discusión está aquí . La pieza clave a considerar en todo esto es ¿qué tipo de error tiene?
Hay dos tipos de errores:
La diferencia tiendo a resumir de la siguiente manera:
Ahora que sabemos a qué nos enfrentamos. Que deberias hacer
Si el error es irrecuperable, desea redirigirlos a una página de error en lugar de continuar a la página solicitada . Eso es tan simple como lo siguiente:
Exception
es una clase que toma dos parámetros, un mensaje y un código. Se recomienda intentar usar los códigos de respuesta HTTP si se ajustan a su escenario.Si el error es recuperable, es probable que solo desee mostrar un mensaje al usuario final sin dejar de mostrarle la página que solicitó. Esto generalmente significa que debe 'poner en cola' un mensaje para la aplicación:
enqueueMessage
toma dos parámetros, el mensaje de error y un tipo de mensaje. Más información aquí (en la parte inferior).También hay una tercera situación que ocurre con bastante frecuencia al menos para mí. Joomla lanzará excepciones para diferentes errores (como un error de consulta de la base de datos). Esto significa que Joomla piensa que este error es irrecuperable. Sin embargo, es posible que desee continuar de todos modos. (Por ejemplo, si estoy alterando una tabla en la actualización de mi extensión, simplemente puedo ejecutar la
ALTER
consulta, lo que arrojará una excepción si la tabla se ha modificado previamente).En ese caso, desea ajustar el código que podría generar una excepción en una sección try ... catch:
Tenga en cuenta que lo que está haciendo es "detectar" el error irrecuperable y obligar al sistema a recuperarse y continuar mostrando la página solicitada.
Agregue todo esto y su caso debería ser un error irrecuperable. (Lo sé porque después tienes 'return false', por lo que es probable que no planees continuar y renuncies a la función).
Por lo tanto, volvería a escribir esto de la siguiente manera:
fuente
$this->get('Errors')
ello porque también está en desuso.JDEBUG
estrue
.Así es como estoy gestionando un error.
Ver o controlador
Entonces, si obtengo un código 404 de mi Modelo (por ejemplo):
Luego lo capto en la vista o controlador y lanzo una Excepción más que Joomla manejará y mostrará la página 404. Para cualquier otro, solo muestro un mensaje de error genérico al usuario.
Lea también esta interesante discusión sobre el manejo de errores.
fuente
La mayoría de los bloques de código como este simplemente se pueden reemplazar,
enqueueMessage
ya que en realidad no están actuando sobre el error y simplemente se usanJError
para imprimirlos.fuente