В настоящее время я пишу приложение laravel с частью для отправки сообщений между персоналом компании и клиентами.
Итак, у меня есть поле с именем «статус» в базе данных. В этом поле значение один указывает, что сообщение ожидает ответа, значение два указывает на то, что на него был дан ответ, а значение три указывает на то, что сообщение было закрыто. Однако здесь есть проблема. Непонятно, что делают эти числа, когда кто-то смотрит на мой код.
Есть ли способ определить это число или любой другой способ сделать мой код более читабельным?
(Я использую Laravel Eloquent ORM)
Приведенный ниже код предназначен для метода закрытия диалога:
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);
}
Я только что добавил связанный метод. @ N69S
Используйте константы в вашей модели сообщения
class Message
{
const STATUS_PENDING = 1;
const STATUS_ANSWERED = 2;
const STATUS_CLOSED = 3;
//...
}
Тогда ваш код будет читаем
public function close(Request $request)
{
$message = Message::find($request->message_id);
$message->status = Message::STATUS_CLOSED;
$message->save();
return \response($message, 200);
}
Или, что еще лучше, сделайте его методом в вашей модели поверх значений констант.
public function close(Request $request)
{
$message = Message::find($request->message_id);
$message->close();
return \response($message, 200);
}
Таким образом, вы можете в будущем обновить метод, например
class Message
{
public function close()
{
if ($this->status != self::STATUS_ANSWERED) {
//log message closed without client answer
}
$this->status = STATUS_CLOSED;
$this->save();
}
}
Вы могли бы использовать что-то вроде этого. Сначала мы создадим в модели несколько статических переменных, представляющих статус вашего разговора:
public static $_STATUS_PENDING = 1;
public static $_STATUS_ANSWERED = 2;
public static $_STATUS_CLOSED = 3;
Когда вы добавите их, теперь вы сможете вызывать их статически:
$message->status = Message::$_STATUS_PENDING; // 1
$message->status = Message::$_STATUS_ANSWERED; // 2
$message->status = Message::$_STATUS_CLOSED; // 3
Теперь это намного читабельнее.
Вы можете пойти еще дальше и создать другой массив, который вы будете использовать для отображения этих значений, без необходимости делать операторы if-else
. Сначала мы создадим массив ключ-значение, который будет представлять значения:
public static function getStatuses()
{
return [
self::$_STATUS_PENDING => 'Pending',
self::$_STATUS_ANSWERED => 'Answered',
self::$_STATUS_CLOSED => 'Closed',
];
}
После этого мы создадим функцию, которую вы сможете вызывать на своем экземпляре Message
, которая будет отображать статус сообщения:
public function getMessageStatus()
{
return self::getStatuses()[$this->status];
}
Теперь, когда у нас есть этот метод, мы можем просто вызвать его и получить правильный статус сообщения:
$message->getMessageStatus(); //Pending, Answered or Closed
Зачем объявлять их переменными? их значения не должны изменяться.
использовать константы в модели. если вы добавите код своей модели и вариант использования значений статуса к своему вопросу, я могу вам помочь.