2014-05-18 19 views

Trả lời

32

Biến ra, bạn có thể sử dụng trình biến đổi Laravel để tạo các thuộc tính không tồn tại trong mô hình của bạn. Giả sử bạn có một mô hình User với một email cột bắt buộc trong users bảng tương ứng, chỉ cần dính này trong mô hình User của bạn:

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

Bây giờ khi bạn làm điều này:

Auth::user()->gravatar 

Bạn sẽ nhận được gravatar.com URL bạn đang mong đợi. Không tạo cột gravatar, biến, phương thức hay bất kỳ thứ gì khác.

+0

wow, điều này thật tuyệt vời – jhamPac

4

Mở rộng về câu trả lời của Wogan một chút ...

Một ví dụ sử dụng một Trait:

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"; 
    } 

} 

Bây giờ trên một mô hình nhất định (ví dụ: tài khoản), nơi bạn muốn hỗ trợ Gravatar, bạn chỉ cần nhập các đặc điểm và sử dụng nó:

use App\Traits\HasGravatar; 

class User extends Model 
{ 
    use HasGravatar; 
} 

Nếu mô hình không có một email cột/thuộc tính, chỉ cần ghi đè mặc định bằng cách đặt nó trong các nhà xây dựng mô hình của bạn như như vậy:

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

Tuyệt vời! Tôi chắc chắn muốn giới thiệu cách tiếp cận dựa trên Trait ngay bây giờ, sau khi làm việc với Laravel trong hai năm. Cảm ơn bạn đã chia sẻ @anderly! – Wogan

Các vấn đề liên quan