Manejo de errores en el controlador (estructura MVC) -- php camp codereview Relacionados El problema

Error handling in controller (MVC structure)


2
vote

problema

Español

últimamente, estoy usando un patrón de modelo de dominio, y mis métodos de controladores a menudo se ven como (ejemplo yi2, verificar al usuario en el sistema de lealtad con la respuesta AJAX).

  n8  

Si la lógica es más compleja, tengo una gran cantidad de con métodos modelo que devuelven los valores de BOOL, por ejemplo (estoy tratando de desacoplar la lógica de los modelos en los métodos atómicos), y parece que no es saludable. ¿Debo encapsular la lógica de los errores de retorno en los modelos? ¿Qué son las mejores prácticas?

Original en ingles

Lately, I'm using domain model pattern, and my controllers methods often looks like (yii2 example, verify user in loyalty system with Ajax response).

if (LoyaltyDomModel::loyaltyVerification($post_data)) {      if (LoyaltyDomModel::setVerify(Yii::$app->user->identity, $post_data)) {          return  ['body'=>'successfull','status' => true];     }     else {         return  ['body'=>'unable update user','status' => 'error'];     } } else {     return  ['body'=>'errorcardno','status' => 'error']; } 

If logic is more complex I have a lot of if statement with model methods which return bool values, for example (I'm trying to decouple models logic in atomic methods), and it looks like not healthy. Should I encapsulate logic of return errors in models? What is best practices?

  
     
     

Lista de respuestas

4
 
vote
vote
La mejor respuesta
 

Le aconsejos le favoreció std::weak_ptr9 Comprueba completamente y vaya a std::shared_ptr0 Bloques, y haga que sus verificadores lanzan excepciones por error. Entonces, haces algo así:

  std::shared_ptr1  

Además, no es una buena idea devolver std::shared_ptr2 en una caja ( std::shared_ptr3 ) y cadena en otro ( 99887776655443324 );

 

I advice you forego if checks completely and go for try-catch blocks, and have your verifiers throw exceptions on error. So, you do something like this:

try {      LoyaltyDomModel::loyaltyVerification($post_data);      LoyaltyDomModel::setVerify(Yii::$app->user->identity, $post_data);       return  ['body'=>'successfull','status' => true]; } catch (LoyaltyVerificationException $e) {      return ['body' => $e->getMessage(), 'status' => 'error'] } catch (UserUpdateException $e) {      return ['body' => $e->getMessage(), 'fields' => $e->getFields(), /* you can pass custom info to exceptions, right? */, 'status' => 'error']; } 

Also, it's not a good idea to return bool in one case ('status' = true) and string in another ('status' = 'error');

 
 
 
 

Relacionados problema

2  PHP Prueba ISSET e instantánea en un disparo. Posible en php?  ( Php test isset and instantiate in one shot possible in php ) 
¿Cómo mejorar este tipo de redundancia? 'done'8 Quiero evitar repetir $ _bet ['NID'] Ejemplo de uso útil de uso: 'done'9 ...

2  PHP - Función para manejar las solicitudes  ( Php function to handle requests ) 
Tengo la siguiente función que maneja las solicitudes. Tiene más de 130 líneas public function run() { $objectRequests = json_decode(file_get_contents(...

28  Biblioteca PHP AutoOoGer  ( Php autoloader library ) 
Básicamente, había escrito esta clase hace poco tiempo para aliviar la carga automática de nuestras bibliotecas locales. La premisa es que todo se divide po...

30  Codeigniter Active Record Subqueries  ( Codeigniter active record subqueries ) 
Yo uso CodeIgNiter en el trabajo, y uno de nuestros archivos modelo tuvo muchas subcarías en ella. Originalmente tuve que escribir manualmente cada subconsu...

4  Consulta para trazar un histograma de calificaciones de canciones  ( Query to plot a histogram of song ratings ) 
Escribí código para trazar una distribución de calificación, que se parece a esto: La función más importante es el stats Función: function stats($so...

10  Comparando datos en 2 tablas en diferentes servidores con suma de comprobación  ( Comparing data in 2 tables on different servers with checksum ) 
Así que he tenido un problema en el que necesito comparar datos en 2 tablas diferentes en dos servidores diferentes. Ahora, sé que MySQL admite CHECKSUM TABL...

-4  Demasiado anidamiento [cerrado]  ( Too much nesting ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

2  Formulario básico de comentarios de PHP  ( Basic php comment form ) 
Soy un novato de programación. He escrito este simple script PHP para ejecutar un formulario de comentarios muy básico y apreciaría cualquier comentario, espe...

41  Conexión de la base de datos en constructor y destructor  ( Database connection in constructor and destructor ) 
Estoy jugando con diferentes maneras de hacer la interacción de la base de datos en PHP, y una de las ideas con las que he estado jugando está conectando a la...

1  Nombre de la bahía Pirata y MAILER MAILER  ( Pirate bay name and magnet mailer ) 
Entonces, primera vez que trato PHP. Pensé que me gustaría establecer un objetivo para mí, dividirlo en problemas más pequeños y comenzar a andar en Google. A...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos