У меня есть модель с мутаторами даты, например created_at
. Скажем, общее свойство timestamp
.Laravel5 Красноречивый мутатор по умолчанию неудачно с вводом даты JSON
При передаче данных от клиента в формате JSON, я буду получать
{
timestamp: "2016-06-07T22:00:00.000Z"
}
Это свойство будет использоваться, чтобы установить некоторые модели, как так:
$model = new Foo();
$model->timestamp = Input::get('timestamp');
Поскольку это вызовет дату мутатор, PHP Carbon
вызывается и не с
InvalidArgumentException in Carbon.php line 425
Unexpected data found.
Trailing data
Теперь, это не проблема с самим Carbon, которая способна обрабатывать форматы JSON. Если вы попробуете
new Carbon('2016-06-07T22:00:00.000Z');
Вы получите инфляционный результат, ожидаемый результат.
Из того, что я вижу, проблема возникает из-за странного красноречивого поведения. Смотрите этот след от выше InvalidArgumentException in Carbon.php line 425
:
in Carbon.php line 425
at Carbon::createFromFormat('Y-m-d H:i:s', '2016-06-07T22:00:00.000Z') in Model.php line 2915
at Model->asDateTime('2016-06-07T22:00:00.000Z') in Model.php line 2871
at Model->fromDateTime('2016-06-07T22:00:00.000Z') in Model.php line 2826
at Model->setAttribute('timestamp', '2016-06-07T22:00:00.000Z') in Model.php line 3351
Eloquent пытается createFromFormat
пропусканием плохого формата которого Doesnt зеркала фактического формата JSON, который вызывает исключение углерода.
С другой стороны, простой вызов, такой как вышеупомянутый new Carbon($jsonDate)
, будет работать в этом случае.
- Как я должен подойти, чтобы решить эту проблему?
- Разве это не должно быть красноречивой ошибкой?
== EDIT ==
я не закодировать любую мутаторный себя. Я использую даты по умолчанию мутаторов так:
public function getDates() {
return ['timestamp'];
}
Это должно работать должным образом. Как вы определяете мутатор? Можете ли вы опубликовать код модели и точное значение 'Input :: get ('timestamp)' (я предполагаю, что это не объект). Я оставлю мутатор, который я установил здесь, чтобы проверить: 'public function setTimestampAttribute ($ value) {$ this-> attributes ['timestamp'] = new \ Carbon \ Carbon ($ value); } 'и код контроллера:' $ obj-> timestamp = '2016-06-07T22: 00: 00.000Z'; ' –
Пожалуйста, разместите свой мутатор. –
Я не использую какой-либо пользовательский мутатор, см. Edit. – brazorf