2015-07-26 30 views
5

Birkaç Laracast dersleri izledi ve şimdi benim ilk laravel projesini inşa ediyorum. Created_at ve updated_at için zaman damgası olan birkaç Eloquent modelim var. erişimcileri: laravel çok güzel bir işlevselliğe sahip sağ tarih biçimini görüntüleme karşılığındalaravel 5 küresel tarih erişimci

.

public function getUpdatedAtAttribute($value) { 
    return Carbon::parse($value)->format('d-m-Y H:i:s'); 
} 
public function getCreatedAtAttribute($value) { 
    return Carbon::parse($value)->format('d-m-Y H:i:s'); 
} 

tarih d-m-Y H:i:s olarak göstermek zorunda kalacak Bu şekilde: Ama HER Etkili modelde şimdi böyle 2 işlevi vardır. Tek sorun şudur: Bunu yarattığım her Model için bunu yapmak istemiyorum ..

Küresel olarak bunu yapabildiğim varsayılan bir Laravel yolu/kuralı var mı, yoksa bir çeşit MasterModel yapmalı mıyım? Model? Her şeyden

+1

Şunlara bakın: http://laravel.com/docs/5.0/helpers – user4621032

+0

Ana sınıfı yapın ve modellerinizi ana – user3786134

cevap

5

Öncelikle, tarih biçimini değiştirmek için erişimci sağlamak gerekmez. İkincisi http://php.net/manual/en/function.date.php

, sen $ ayarlamak istemiyorsanız:

class User extends Model { 
    protected $dateFormat = 'U'; // this will give you a timestamp 
} 

Burada mevcut biçimleri hakkında daha fazla bilgi edinebilirsiniz: Bu örneğin Modelinizdeki $ DATEFORMAT değişkeni ayarlamak için yeterli tüm modeller için değişkeni, orada ayarlayın ve yapmak DATEFORMAT tüm modeller bu sınıfı genişletir:

class BaseModel extends Illuminate\Database\Eloquent\Model { 
    protected $dateFormat = 'U'; 
} 

class User extends BaseModel { 
    ... 
} 
+2

'dan devralın OOP'un güzelliği –

+0

Neden bu güzel OOP? Yalnızca mülklerin paylaşılması için miras, kötü bir uygulamadır. – schellingerht

+0

Sadece bunun için bir ebeveyn sınıfı oluşturmak kötüdür. Bunun yerine bir özellik kullanın. – kjdion84

5

aynı arıyordu, ama ne yazık ki küresel bir erişimci oluşturmak için bir yol bulamadım.

DATEFORMAT özelliğiyle "sorun", bu bir mutatör değil bir erişimci olmasıdır. Ve bir taban sınıfını genişletmek, hem Model modelinde hem de diğer modellerde işe yaramaz, çünkü Model doğrudan doğruya değil, Authenticatable'ı genişletir.

Burada sonraki en iyi şey olarak bunu yaptık - Bir FormatsDates özelliği yarattı. Yöntemleriniz:

trait FormatsDates 
{ 
    protected $newDateFormat = 'd-m-Y H:i:s'; 

    public function getUpdatedAtAttribute($value) { 
     return Carbon::parse($value)->format($this->newDateFormat); 
    } 

    public function getCreatedAtAttribute($value) { 
     return Carbon::parse($value)->format($this->newDateFormat); 
    } 
} 

Şimdi bu özelliği istediğim herhangi bir modelde kullanabilirim. Örneğin. Kullanıcı modeli:

class User extends Authenticatable 
{ 
    use FormatsDates; 
} 

Belki birileri bu yararlı bulur.

+0

Bu özellik kodunu tam olarak nereye koydunuz ... hangi dosyada? – lewis4u

+0

Nerede istersen. Benim durumumda 'app \ Models \ Support \ FormatsDates.php' içinde. – Koby