2014-05-15 2 views
7

Ich habe Laravel. Ich habe ein Formular. Ich habe eine MySQL-Datenbank. Es gibt einige Daten darin. Wenn ich das Modell und das Formular binde, wird das Formular pflichtgemäß mit unformatierten MySQL-Daten gefüllt. Das ist offensichtlich nicht das, was ich brauche.Laravel Form Modell verbindlich - Datum Formatierung

Meine Frage ist: Wie bekomme ich ein modellgebundenes Formular, um Daten lesbarer anzuzeigen?!? Es gibt keine Möglichkeit, die Daten abzufangen und zu formatieren. Oder gibt es für eine allgemeinere Lösung irgendeine Möglichkeit, irgendwelche Daten zwischen dem Modell und dem Formular zu verarbeiten, bevor der Benutzer es sieht?

Denke ich an alles falsch? Eine Milliarde Danke!

+3

ich nicht viel Zeit haben, so kann ich eine vollständige Antwort nicht geben, aber man sollte die Dokumentation hier ansehen ... http://laravel.com/docs/eloquent#accessors-and -mutators Sie können die Mutatoren verwenden, um Ihnen automatisch ein gewünschtes Datumsformat zu geben. – user3158900

+0

vielleicht kann ein Moderator helfen: http: // culttt.com/2014/03/03/model-presents-laravel-4/ – Jarry

Antwort

5

Sie können eine accessor Methode in Ihrem Modell wie folgt hinzu:

public function getCreatedAtAttribute($date) 
{ 
    $date = new \Carbon\Carbon($date); 
    // Now modify and return the date 
} 

Diese für created_at genannt wird. Überprüfen Sie auch date-mutators, wenn Sie Standardwerte überschreiben müssen. Überprüfen Sie Carbon Docs.

+0

kann ich dies ändern, um auf ein anderes Feld zuzugreifen? IE: öffentliche Funktion getMyOtherDateFieldAttribute ($ date) {... –

+2

Ja, Sie benennen nur die Funktion nach welcher Spalte Sie ändern möchten. Achten Sie darauf, camel case für den Funktionsnamen zu verwenden. – user3158900

+0

ist der Funktionsname, wenn der Name des Datenfelds start_dt lautet. Wie die öffentliche Funktion getStart_dtAttribute ($ date) {}. Und warum sein Zwang, Kohlenstoff zu verwenden. – webtuts4u

2

Sie können das Datum im Formular mit der Methode format() formatieren.

{{ Form::text('name', $model->created_at->format('d/m/Y H:i')) }} 

Wenn Sie die Anzeige als Klartext:

{{ $model->created_at->format('d/m/Y H:i') }} 

Wenn Sie möchten, dass der Benutzer in der Lage sein zu modifizieren

Wenn Sie es in einem Formularelement verwenden das Datum auf eine nette Art, könnte man drei verschiedene Auswahlfelder verwenden. Hier ist ein Auszug aus einem Projekt, das ich daran gearbeitet erlaubt dem Benutzer, das Geburtsdatum zu ändern:

<div class="form-group {{ $errors->has('date_of_birth') ? 'has-error' : '' }}"> 
    {{ Form::label('date_of_birth', 'Date of Birth', ['class' => 'control-label']) }} 
    <div class="form-inline"> 
     {{ Form::selectRange('date_of_birth[day]', 1, 31, null, ['class' => 'form-control']) }} 
     {{ Form::selectMonth('date_of_birth[month]', null, ['class' => 'form-control']) }} 
     {{ Form::selectYear('date_of_birth[year]', date('Y') - 3, date('Y') - 16, null, ['class' => 'form-control']) }} 
    </div> 
    {{ $errors->first('date_of_birth', '<span class="help-block">:message</span>') }} 
</div> 

Dies wird in einer Form enthalten, die das Modell an sich gebunden hat.

Side Hinweis

Die alternative Antwort hier gepostet tatsächlich überschreibt den Standard Art und Weise, dass Laravel Daten behandelt, und wenn Sie tatsächlich ein Kohlenstoff-Objekt zurück, Sie haben nie den Luxus die format Methode zu verwenden, oder irgendwelche anderen praktischen Dinge, die Kohlenstoff hat.

Wenn Sie andere Spalten, die Daten enthalten, fügen sie an die Daten Mutatoren-Liste:

public function getDates() 
{ 
    return ['created_at', 'updated_at', 'date_of_birth', 'some_date_column']; 
} 

Dies wird nun machen es so, dass jeder von denen ist eine Instanz von Carbon so dass Sie, wie Sie zu formatieren Sie bitte , wann immer du willst und einfach modifizieren, duplizieren und eine ganze Reihe anderer Dinge. Weitere Informationen hierzu finden Sie unter:

+0

'$ date = new \ Carbon \ Carbon ($ date);' erzeugt ein 'Carbon' Objekt,' $ date' wird wegen 'new \ Carbon \ ein' Carbon' Objekt Kohlenstoff ($ date) '. In meiner Antwort habe ich '// Jetzt ändern und das Datum zurückgeben 'erwähnt. –

+1

Das sieht nach einer interessanten Alternative aus, danke. –

+0

@ WereWolf-TheAlpha Ja, aber wenn Sie das 'Carbon' Objekt zurückgeben, dann hat es letzten Endes keinen wirklichen Vorteil gegenüber der Verwendung von' format() '. – ollieread

0

Sie können alle Felder, die aus der Datenbank abgerufen werden, mit einem Accessor in Ihrem Modell formatieren. Wenn Ihr Datenbankfeld beispielsweise created_at lautet, verwenden Sie getCreatedAtAttribute.

public function getCreatedAtAttribute($date) 
{ 
    return Carbon::($date)->format('d/m/Y'); 
}