No núcleo do Joomla, ainda encontro muitas chamadas como esta:
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode("\n", $errors));
return false;
}
Mas o JError está obsoleto desde a liberação da plataforma 12.1. Então, como devo usar exceções padrão do PHP.
php
error-handling
jerror
Harald Leithner
fonte
fonte
Respostas:
Como o @DmitryRekun disse, uma boa discussão está aqui . A peça chave a considerar em tudo isso é que tipo de erro você possui?
Existem dois tipos de erros:
A diferença que tendem a resumir da seguinte forma:
Agora que sabemos com o que estamos lidando. O que você deveria fazer?
Se o erro for irrecuperável, você deseja redirecioná-los para uma página de erro, em vez de continuar na página solicitada . Isso é tão simples quanto o seguinte:
Exception
é uma classe que aceita dois parâmetros, uma mensagem e um código. É recomendável tentar usar os códigos de resposta HTTP, se eles se ajustarem ao seu cenário.Se o erro for recuperável, você provavelmente só deseja exibir uma mensagem para o usuário final enquanto ainda mostra a página solicitada. Isso normalmente significa que você deve 'enfileirar' uma mensagem para o aplicativo:
enqueueMessage
usa dois parâmetros, a mensagem de erro e um tipo de mensagem. Mais informações aqui (na parte inferior).Há também uma terceira situação que ocorre com bastante frequência para mim, pelo menos. O Joomla lançará exceções para diferentes erros (como um erro de consulta ao banco de dados). Isso significa que o Joomla acha que esse erro é irrecuperável. No entanto, convém continuar assim mesmo. (Por exemplo, se estou alterando uma tabela na atualização da minha extensão, posso apenas executar a
ALTER
consulta, que emitirá uma exceção se a tabela tiver sido alterada anteriormente.)Nesse caso, você deseja agrupar o código que pode lançar uma exceção em uma seção try ... catch:
Observe que o que você está fazendo é "capturar" o erro irrecuperável e forçar o sistema a se recuperar e continuar mostrando a página solicitada.
Adicione tudo isso e seu caso deve ser um erro irrecuperável. (Eu sei disso porque você 'retornou falso' depois, então você provavelmente não planeja continuar e está desistindo da função.)
Assim, eu reescreveria isso da seguinte maneira:
fonte
$this->get('Errors')
porque também está obsoleto.JDEBUG
fortrue
.Aqui está como estou gerenciando um erro.
Vista ou Controlador
Portanto, se eu receber um código 404 do meu modelo (por exemplo):
Então eu pego na visualização ou no controlador e ligo mais uma exceção que o Joomla manipulará e exibirá a página 404. Para qualquer outro, apenas mostro uma mensagem de erro genérica para o usuário.
Leia também esta interessante discussão sobre o tratamento de erros.
fonte
A maioria dos blocos de código como esse pode ser simplesmente substituída por,
enqueueMessage
uma vez que eles não estão realmente atuando no erro e simplesmente usando-osJError
para imprimi-los.fonte