Actualmente, estoy escribiendo una aplicación laravel con una parte para enviar mensajes entre el personal de la empresa y los clientes.
Entonces, tengo un campo llamado "estado" en la base de datos. En este campo, un valor de uno indica que el mensaje está esperando una respuesta, un valor de dos indica que ha sido respondido y un valor de tres indica que el mensaje ha sido cerrado. Sin embargo, aquí hay un problema. No está claro qué hacen estos números cuando alguien mira mi código.
¿Habría alguna forma de definir este número o alguna otra forma de hacer que mi código sea más legible?
(Estoy usando laravel eloquent ORM) El siguiente código es para el método que cierra una conversación:
public function close(Request $request) { $message = Message::find($request->message_id); // Status one indicates that a conversation has been closed $message->status = 1; $message->save(); return \response($message, 200); }Use constantes en su modelo de mensaje
class Message { const STATUS_PENDING = 1; const STATUS_ANSWERED = 2; const STATUS_CLOSED = 3; //... }Entonces su código será legible
public function close(Request $request) { $message = Message::find($request->message_id); $message->status = Message::STATUS_CLOSED; $message->save(); return \response($message, 200); }O incluso mejor, conviértalo en un método en su modelo además de los valores constantes
public function close(Request $request) { $message = Message::find($request->message_id); $message->close(); return \response($message, 200); }De esa manera, en el futuro puede actualizar el método, por ejemplo
class Message { public function close() { if ($this->status != self::STATUS_ANSWERED) { //log message closed without client answer } $this->status = STATUS_CLOSED; $this->save(); } }Podrías usar algo como esto. Primero creamos algunas variables estáticas en el modelo, que representan el estado de su conversación:
public static $_STATUS_PENDING = 1; public static $_STATUS_ANSWERED = 2; public static $_STATUS_CLOSED = 3;Cuando los agregue, podrá llamarlos estáticamente ahora:
$message->status = Message::$_STATUS_PENDING; // 1 $message->status = Message::$_STATUS_ANSWERED; // 2 $message->status = Message::$_STATUS_CLOSED; // 3Esto es mucho más legible ahora.
Puede ir aún más lejos con esto y crear otra matriz que usará para mostrar estos valores, sin la necesidad de hacer declaraciones if-else . Primero crearemos una matriz clave-valor que representará los valores:
public static function getStatuses() { return [ self::$_STATUS_PENDING => 'Pending', self::$_STATUS_ANSWERED => 'Answered', self::$_STATUS_CLOSED => 'Closed', ]; } Después de eso, crearemos una función a la que podrá llamar en su instancia de Message , que mostrará el estado del mensaje:
public function getMessageStatus() { return self::getStatuses()[$this->status]; }Ahora, cuando tenemos este método, simplemente podemos llamarlo y obtener el estado correcto del mensaje:
$message->getMessageStatus(); //Pending, Answered or Closed