Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, estou tentando fazer uma mensagem de erro amigavel caso tentarem deletar um registro que tenha relação com outra tabela. O sistema gera um exception e envia para o ErrorController.
Tem como pegar isso e só mostrar um erro para o usuário?
Minha ação de remover
/**
* Ação para remover o registro
*
* @name removeAction
*/
public function removeAction() {
// Desabilita o layout
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(TRUE);
// Recupera o id
$id = ($this->_request->getParam("id")) ? $this->_request->getParam("id") : 0;
// Verifica se existe id
if($id > 0) {
// Cria o where
$where = $this->_model->getAdapter()->quoteInto("idproduto = ?", $id);
// Remove o registro
$this->_model->delete($where);
}
// Redireciona
$this->_helper->redirector("index", NULL, NULL);
}
Valeu galera.
Nossa rapaz, essas 2 dias ai que voce deu vai li livrar de um monte de código uhauehae
Sobre colocar dentro de um try catch eu ja tentei e nao funcionou nao, alias, entrei nos fontes do zend e achei onde executa a query do delete, e la tambem nao tem nada para gerar a exceção. Preciso habilitar alguma coisa antes de poder usar o try catch ai?
Valeu pelas dicas =)
Fiz o teste com outras coisas, por exemplo upload de arquivo, e tambem nao cai no catch
// Cria o objeto
$file_transfer = new Zend_File_Transfer_Adapter_Http();
// Seta o diretório destino
$file_transfer->setDestination("common/uploads/photos");
// faz o upload
try {
$valid = $file_transfer->receive();
}die("OK");
}
PS: Ja tentei com Zend_Exception também;Então... no seu Model, você faz assim (por exemplo):
public function delete($where) {
try {
parent::delete($where);
} catch (Exception $e) {
echo 'Opa... algum problema aconteceu.';
}
}
Tente executar com um erro e veja o que acontece.
Carlos Eduardo
Rapaz, mas não é que funcionou? =D
Mas por que no controlador se eu gero exceptions ele nao entra? Não deveria ser a mesma coisa já que o delete() é o do objeto parent?
Que coisa de louco em =)
E nos casos como o do upload? Ele deveria disparar um exception tb não deveria?
Valeu!
Olha, em teoria ele deveria capturar a exceção sempre que for executado um bloco try catch. O código do controller/action é executado dentro de um bloco try catch. Se você executa um método específico dentro de um novo bloco try catch ele deve capturar. O que pode acontecer é que a exceção é enviada antes. Sobre a questão do upload, você pode fazer assim:
// faz o upload
try {
// Cria o objeto
$file_transfer = new Zend_File_Transfer_Adapter_Http();
// Seta o diretório destino
$file_transfer->setDestination("common/uploads/photos");
$valid = $file_transfer->receive();
} echo 'Ops... problemas no upload - '.$e->getMessage();
}
Carlos Eduardo
Hum rapaz, entendi a essência da coisa. No upload funcionou tambem. Mudei meu update, e desta forma tambem funcionou.
Poxa, obrigado de novo pela ajuda enorme.
Boa semana
Valeu!!! Boa semana!!
Carlos Eduardo
Vamos começar pelo seguinte:
// Recupera o id
Melhorando estas linhas:
$this->_request->getParam("id");
O método getParam() pode receber dois parâmetros, sendo que o segundo é o valor default. Então podemos substituir:
$id = ($this->_request->getParam("id")) ? $this->_request->getParam("id") : 0;
Por
$id = $this->_request->getParam("id", 0);
Outra coisa
// Cria o where
Podemos colocar direto no where. Assim:
// Remove o registro
Carlos Eduardo