2017-09-10 2 views
0

En Lumen, j'ai dupliqué la méthode 'respondError()' dans la classe de base Controller.php et Handler.php dans le dossier Exception.Lumen - supprimer la méthode en double

Pour éviter la duplication, où suggérez-vous de déplacer cette méthode afin qu'elle soit facilement accessible à toutes les classes?

public function respondError($errorType = '', $message = null, $statusCode = 500) 
{ 
    return response([ 
     'success' => false, 
     'error_type' => $errorType, 
     'errors'  => [], 
     'message' => $message, 
    ], $statusCode); 
} 

Répondre

1

Vous devez déplacer le code à sa propre classe:

class ErrorResponse { 
    protected $errorType = null; 
    protected $message = null; 
    protected $statusCode = null; 

    public __construct($errorType = '', $message = null, $statusCode = 500) { 
     $this->errorType = $errorType; 
     $this->message = $message; 
     $this->statusCode = statusCode ; 
    } 

    public getResponse() { 
     return response([ 
      'success' => false, 
      'error_type' => $this->errorType, 
      'errors'  => [], 
      'message' => $this->message, 
     ], $this->statusCode); 
    } 
} 

Pourquoi devriez-vous ajouter les frais généraux que vous demanderez? Vous pouvez trouver dans le futur que vous souhaitez ajouter des détails à la réponse, par ex. un suivi de débogage d'une exception, etc. ou vous pouvez renvoyer la réponse d'une fonction: Situation typique: Votre contrôleur appelle une fonction API, la fonction API donne une erreur de bas niveau, mais le contrôleur doit y ajouter des détails . L'utilisation de la classe d'erreur de structure pour cela rendra votre API entière dépendante du framework, que vous devriez éviter autant que possible.

Vous pouvez utiliser le code maintenant de partout:

$error = new ErrorResponse('bad error', 'something went wrong!'); 
return $error->getResponse(); 
0

cela dépend de quel modèle vous écrivez, si vous utilisez mvc de base, il est préférable de créer un contrôleur qui hérite du contrôleur de base et le reste de lui et l'écriture dans ce code. Si vous utilisez le référentiel et le service, il est préférable d'écrire dans le service de base.