2014-05-18 15 views
14

Jaki jest najszybszy sposób wdrożenia adresów URL Gravatar w Laravel? Mam obowiązkowe pole adresu e-mail, ale nie chcę tworzyć nowej kolumny dla Gravatars i wolałbym używać natywnych atrybutów Auth::user().Jak mogę wdrożyć Gravatar w Laravel?

Odpowiedz

32

Okazało się, możesz użyć mutatora Laravel do stworzenia atrybutów, które nie istnieją w twoim modelu. Zakładając, że masz User model z obowiązkowego email kolumnie odpowiadającej users tabeli, po prostu trzymać to w modelu User:

public function getGravatarAttribute() 
{ 
    $hash = md5(strtolower(trim($this->attributes['email']))); 
    return "http://www.gravatar.com/avatar/$hash"; 
} 

Teraz, kiedy to zrobić:

Auth::user()->gravatar 

Dostaniesz adres URL gravatar.com, którego oczekujesz. Bez tworzenia kolumny, zmiennej, metody grawitacji lub czegokolwiek innego.

+0

wow, to świetnie – jhamPac

4

Rozwijając na odpowiedź Wogan trochę ...

Innym przykładem stosując cecha:

namespace App\Traits; 

trait HasGravatar { 

    /** 
    * The attribute name containing the email address. 
    * 
    * @var string 
    */ 
    public $gravatarEmail = 'email'; 

    /** 
    * Get the model's gravatar 
    * 
    * @return string 
    */ 
    public function getGravatarAttribute() 
    { 
     $hash = md5(strtolower(trim($this->attributes[$this->gravatarEmail]))); 
     return "https://www.gravatar.com/avatar/$hash"; 
    } 

} 

Teraz w danym modelu (czyli użytkownika), w którym chcesz obsługiwać Gravatar, wystarczy zaimportować cechę i używać go:

use App\Traits\HasGravatar; 

class User extends Model 
{ 
    use HasGravatar; 
} 

Jeśli model nie ma email kolumny/atrybut, po prostu zastąpić ustawienia domyślne, ustawiając go w konstruktorze modelu podobnego więc:

public function __construct() { 
    // override the HasGravatar Trait's gravatarEmail property 
    $this->gravatarEmail = 'email_address'; 
} 
+1

Świetne! Tak, zdecydowanie polecam podejście oparte na Trait teraz, po pracy z Laravel przez dwa lata. Dziękujemy za udostępnienie @anderly! – Wogan