Ich habe ein Problem mit Carbon
und HTML5-Eingang input[type=datetime-local]
, weil dieser Eingang sendet Zeit im Format Y-m-d\TH:i
(zB 2016-11-20T11:45
).Carbon unerwartete Datum-Zeit-Format in Laravel
Ich habe Methode in meinem Controller:
public function store(ModelStoreFormRequest $request)
{
$model = new Model($request->all());
$model->save();
return redirect->action(/*...*/);
}
Und ich Ausnahme:
InvalidArgumentException in Carbon.php line 582: Data Missing
1. in Carbon.php line 582
2. at Carbon::createFromFormat('Y-m-d H:i:s', '2016-11-20T11:45') in HasAttributes.php line 709
So habe ich dieses Problem gelöst, indem nächste Funktion in meinem Modell zu erstellen:
public function setStartedAtAttribute($startedAt)
{
if($startedAt instanceof Carbon) {
$this->attributes['started_at'] = $startedAt;
return;
}
if(strpos($startedAt, 'T')) {
$this->attributes['started_at'] = Carbon::createFromFormat('Y-m-d\TH:i', $startedAt);
return;
}
$this->attributes['started_at'] = Carbon::createFromFormat('Y-m-d H:i:s', $startedAt);
}
Aber ich mag diese Lösung nicht, ich frage mich, ob es elegantere Lösung gibt? Ich denke ModelStoreFormRequest::prepareForValidation()
Methode zu verwenden und es zu überprüfen, ob Format Datum ist: Y-m-d\TH:i
Datetime-Wert-Format zu ändern: Y-m-d H:i:s
, oder vielleicht Carbon::parse()
Methode wie folgt zu verwenden:
protected function prepareForValidation()
{
$input = $this->all();
$input['started_at'] = \Carbon\Carbon::parse($input['started_at']);
$this->replace($input);
}
Aber ich weiß noch nicht, ist Diese Lösung ist in Ordnung. Ich versuche, Anliegen und Verpflichtungen jeder Klasse zu trennen ... Was schlägst du vor? Irgendeine andere elegantere Lösung oder bleib bei der aktuellen?
Was mit mit 'neuen Carbon-falsch ($ starteAt) '? –
@MarkBaker Das ist in Ordnung, aber mein Problem ist, dass Laravel standardmäßig 'Carbon :: createFromFormat ('Ymd H: i: s')' 'nennt, aber was du vorschlägst ist,' 'new carbon'' anstatt 'Carbon :: parse() ', kaufe immer noch lässt mich mit problem sollte das in setter,' FormRequest :: preapreForValidation' oder woanders ... – clzola
Stellen Sie ein Problem unter https://github.com/laravel/framework, wenn Laravel Datumsangaben nicht verarbeiten kann, formatiert nach dem ISO 8601-Standard out-of-the-box. – sisve