2016-04-15 161 views
24

我是Traits的新手,但是我有很多代碼在我的函數中重複使用,我想使用Traits使代碼更簡潔。我在我的Http目錄中創建了一個名爲BrandsTrait.phpTraits目錄。它所要做的就是呼籲所有品牌。但是,當我嘗試調用BrandsTrait對我的產品控制器,就像這樣:如何使用Traits - Laravel 5.2

use App\Http\Traits\BrandsTrait; 

class ProductsController extends Controller { 

    use BrandsTrait; 

    public function addProduct() { 

     //$brands = Brand::all(); 

     $brands = $this->BrandsTrait(); 

     return view('admin.product.add', compact('brands')); 
    } 
} 

它給了我一個錯誤說方法[BrandsTrait]不存在。我想要初始化一些東西,或者以不同的方式調用它?

這是我喜歡的,可以由很多類共享一個不同的地方定義類的部分性狀BrandsTrait.php

<?php 
namespace App\Http\Traits; 

use App\Brand; 

trait BrandsTrait { 
    public function brandsAll() { 
     // Get all the brands from the Brands Table. 
     Brand::all(); 
    } 
} 

回答

30

思考。通過將use BrandsTrait放在你的課堂上,它具有該部分。

你想寫什麼是

$brands = $this->brandsAll(); 

這是你的特質的方法的名稱。

另外 - 不要忘記添加一個返回到您的brandsAll方法!

+0

哦哇,沒有注意到,我的錯誤。謝謝。 – David

+1

我可以通過繼承來實現這一點,還有什麼提供了這些特性? –

+6

PHP不支持多個繼承,因此,只允許您擴展一個類。然而,隨着性狀的不同,你可以使用盡可能多的。 – maddockst

2
use App\Http\Traits\BrandsTrait; 

class ProductsController extends Controller { 

    use BrandsTrait; 

    public function addProduct() { 

     //$brands = Brand::all(); 

     $brands = $this->brandsAll(); 

     return view('admin.product.add', compact('brands')); 
    } 
}