web-dev-qa-db-ja.com

特性の使用方法-Laravel 5.2

私はTraitsを初めて使用しますが、関数内で繰り返し使用するコードがたくさんあるため、Traitsを使用してコードを煩雑にしないようにします。 TraitsディレクトリにHttpディレクトリを作成し、BrandsTrait.php。そして、それはすべてのブランドを呼び出すことです。しかし、次のように、Products ControllerでBrandsTraitを呼び出そうとすると:

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'));
    }
}

Method [BrandsTrait] is not exist。というエラーが表示されます。==何かを初期化するか、別の方法で呼び出すと思いますか?

これが私の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();
    }
}
29
David

多くのクラスで共有できる別の場所でクラスのセクションを定義するような特性を考えてください。配置することにより use BrandsTraitクラスにはそのセクションがあります。

あなたが書きたいのは

$brands = $this->brandsAll();

それはあなたの特性のメソッドの名前です。

また、brandsAllメソッドに戻り値を追加することを忘れないでください!

37
Scopey
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'));
    }
}
3