2015-06-12 14 views
18

devo

il default created_at data di continuare a stampare come un formato MySQL: 2015/06/12 09:01:26. Volevo stamparlo a modo mio come 12/2/2017 e altri formati in futuro.Qual è la migliore pratica per creare una funzione di aiuto personalizzata in php Laravel 5?


ho creato

un file chiamato DataHelper.php e conservarlo a /app/Helpers/DateHelper.php - e sembra che questo

<?php 

namespace App\Helpers; 

class DateHelper { 

    public static function dateFormat1($date) { 
     if ($date) { 
      $dt = new DateTime($date); 

     return $dt->format("m/d/y"); // 10/27/2014 
     } 
    } 
} 

voglio

essere in grado di definito nella mia vista lama come

DateHelper::dateFormat1($user->created_at) 

Non sono sicuro di cosa fare dopo.

Qual è la procedura migliore per creare una funzione di supporto personalizzata in php Laravel 5?

+1

si dovrebbe davvero fare il formato di un parametro con un valore di default. –

risposta

18
  1. all'interno della directory app/Http, creare un file helpers.php e aggiungere le vostre funzioni.
  2. Entro composer.json, nel blocco autoload, aggiungere "files": ["app/Http/helpers.php"].
  3. Run composer dump-autoload

Che dovrebbe farlo. :)

+0

Lo vedo dappertutto. Perché dovresti utilizzare uno strumento di terze parti per includere un file già presente nella tua app? – dKen

+0

@dKen, compositore.json non è uno strumento di terze parti e ha più utilità rispetto al semplice recupero di pacchetti di terze parti nella sezione "richiede". Inoltre "carica automaticamente" le tue funzioni PHP, rendendole disponibili nel runtime della tua app. – TechyTimo

+0

@TechyTimo 'compositore' è assolutamente di terze parti. Laravel non l'ha scritto, né io, quindi la terza parte. È anche [non richiesto per Laravel per funzionare] (http://stackoverflow.com/q/15940140/366529), quindi è praticamente una buona definizione di un plug-in di terze parti.Inoltre, non ho detto che non aveva alcun senso, il mio punto era che se è facile includere il file all'interno del framework, passarlo al di fuori del framework non ha molto senso. [Sembra che alcune persone stiano arrivando a questo punto di vista] (http://stackoverflow.com/a/33776272/366529). – dKen

13

Dal momento che il metodo di supporto è statico si potrebbe aggiungere la tua classe di supporto per config/app alias proprio come una facciata, in questo modo:

'aliases' => [ 
    //'dateHelper'=> 'App\Helpers\DateHelper', //for Laravel 5.0 
    'dateHelper'=> App\Helpers\DateHelper::class, //for Laravel 5.1 
] 

Poi, più tardi nella vista:

{{dateHelper::dateFormat1($user->created_at)}} 

Tuttavia , se stai anche cercando un modo per farlo senza una classe di supporto. Si può considerare l'utilizzo di Mutatori e aggiunge nel modello:

class User extends Model{ 
    protected $fillable = [ 
    'date' 
    ]; 

    protected $appends = [ 
    'date_format_two' 
    ]; 


    public function getDateAttribute($value){ 
     $dt = new DateTime($value); 
     return $dt->format("m/d/y"); // 10/27/2014 
    } 

    //date 
    public function getDateFormatTwoAttribute($value){ 
     $dt = new DateTime($value); 
     return $this->attributes['date_format_two'] = $dt->format("m, d ,y"); // 10,27,2014 
    } 
} 

In seguito si può fare

$user = User::find(1); 

{{$user->date}}; 
{{$user->date_format_two}}; 
+0

Grazie per il tuo suggerimento :) – ihue

+0

Continuo a ricevere "App \ DateHelper' Non trovato e l'ho incluso in cima già. Sai perché? Devo eseguire 'compositore update 'o qualcosa di simile per rendere utilizzabile il mio alias? – ihue

+0

non c'è bisogno di aggiornamento del compositore se si utilizza laravel 5, altrimenti se Laravel 4, si 'componi il dump-autoload', assicurati anche che lo spazio dei nomi sia corretto. poiché si trova qui /app/Helpers/DateHelper.php, lo spazio dei nomi corretto è 'App \ Helpers \ DateHelper' – Digitlimit