#php #date #logging #model-view-controller #cakephp
Вопрос:
Я унаследовал проект CakePHP 3, обрабатывающий некоторые показания в определенные даты. У нас есть API, подключенный к телефонному приложению, которое снимает показания скважины и вставляет их в базу данных.
Показания, а также созданные и обновленные метками времени, работают правильно, но в этом унаследованном проекте у них есть отдельный столбец даты «дата чтения», который дает мне 0015-10-05. Другие аспекты контроллера API работают нормально, но это по-прежнему вызывает у меня проблемы. У меня есть код для метода add() ниже
/**
* Add method
*
* @return CakeHttpResponse|null Redirects on successful add, renders view otherwise.
*/
public function add()
{
$wellReading = $this->WellReadings->newEntity();
if ($this->request->is('post')) {
$data = $this->request->getData();
$this->log($this->request->getAttribute('params'));
$this->ats_log($this->request->getAttribute('params'));
$data['reading_date'] = date('Y-m-d', strtotime('Today'));
$data['reading_time'] = date('G:i:s');
$wellReading = $this->WellReadings->newEntity($wellReading, $data);
if ($this->WellReadings->save($wellReading)) {
// we're going to add some related info in here so we can return it with the inserted record in the API
$operator = $this->WellReadings->Operators->findById($wellReading->operator_id)->first();
$well = $this->WellReadings->Wells->findById($wellReading->well_id)->first();
$wellReading->reading_date = date('Y-m-d');
$wellReading->operator = $operator->name;
$wellReading->well = $well->identifier;
$wellReading->region_id = $well->region_id;
$this->set(['success' => true, 'data' => $wellReading, '_serialize' => ['success', 'data']]);
} else {
$this->set(['success' => false, 'errors' => $wellReading->errors(), '_serialize' => ['success', 'errors']]);
}
}
}
Я удалил UseLocaleParser из bootstrap.php как я читал, он вызывает проблемы в более старых версиях CakePHP.
Кроме того, $this->log() ничего мне не дает, что бы я ни пытался. Я пытался использовать переменную данных и множество различных итераций $this->запрос ->>, Параметры, атрибут, getData, ничего не будет отображаться в моих журналах ошибок.
Метод ats_log должен принимать $данные и записывать все, что находится в этой переменной, в отдельный файл журнала, у нас была эта идея, когда в функции журнала Cake ничего не появилось, но все в этом файле равно НУЛЮ. Тем не менее, показания отображаются в базе данных, и только столбец reading_date неверен.
Мы будем очень признательны за любую помощь.
ПРАВКА: Мой ведущий разработчик сообщил мне, что мы должны включить локальный анализатор.
Комментарии:
1. Это реальный производственный код, или вы просто что-то тестируете? Более конкретно, вы действительно намерены «жестко закодировать» дату и время таким образом, или, возможно, предполагается, что они будут отправлены с интерфейса?
2. Это производственный код, который я унаследовал. На данный момент я просто добавил журналы, чтобы посмотреть, что на самом деле поступает, но ничего не получаю. Дата считывания должна исходить с переднего конца, а затем мы жестко закодируем ее в столбце дата считывания. Я очень новичок в CakePHP, поэтому не уверен в другом способе.
Ответ №1:
Таким образом, этот код не показал всей картины после дальнейшей работы над проектом.
Мой старший разработчик уже изменил предыдущий код с
$data['reading_date'] = date('d/m/Y', strtotime('Today'));
к тому, что у меня есть выше. Это привело к тому, что валидатор в таблице Wellreading выдал ошибку. В валидаторе принятым форматом был «mdY». Я не уверен, почему кто-то допустил недопустимый формат даты в базе данных, но после переключения его на » Ymd » данные вводятся правильно.
Вторая часть, вместо использования $this->log(); для сбора данных, я смог использовать debug(); чтобы данные отображались в отдельном журнале в файловой структуре.