web-dev-qa-db-ja.com

Laravel 5.4.18で特性を使用する方法は?

ファイルを正確に作成する場所、書き込む場所、トレイトで宣言されている関数の使用方法の例が必要です。 使用Laravel Framework 5.4.18

-私はフレームワークのどのフォルダーも変更していません、すべてが対応する場所です-

もうすでにありがとうございます。

6
cfrostte

HttpディレクトリにBrandsTrait.phpという特性を持つ特性ディレクトリを作成しました

そしてそれを次のように使用します:

use App\Http\Traits\BrandsTrait;

class YourController extends Controller {

    use BrandsTrait;

    public function addProduct() {

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

        // $brands = $this->BrandsTrait();  // this is wrong
        $brands = $this->brandsAll();
    }
}

これが私のBrandsTrait.phpです

<?php
namespace App\Http\Traits;

use App\Brand;

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

        return $brands;
    }
}

注:特定のnamespaceで記述された通常の関数と同様に、traitsも使用できます

15
Mayank Pandeyz

特性の説明:

トレイトは、PHPなどの単一継承言語でコードを再利用するためのメカニズムです。特性は、開発者が異なるクラス階層にあるいくつかの独立したクラスでメソッドのセットを自由に再利用できるようにすることで、単一継承のいくつかの制限を減らすことを目的としています。特性とクラスの組み合わせのセマンティクスは、複雑さを軽減し、多重継承とMixinsに関連する一般的な問題を回避する方法で定義されます。

ソリューション

アプリにTraitsという名前のディレクトリを作成します

Traitsディレクトリに独自の特性を作成します(ファイル:Sample.php):

<?php

namespace App\Traits;

trait Sample
{
    function testMethod()
    {
        echo 'test method';
    }
}

次に、独自のコントローラーで使用します。

<?php
namespace App\Http\Controllers;

use App\Traits\Sample;

class MyController {
    use Sample;
}

これで、MyControllerクラスにtestMethodメソッドが含まれています。

トレイトメソッドの動作は、MyControllerクラスでオーバーライドすることで変更できます。

<?php
namespace App\Http\Controllers;

use App\Traits\Sample;

class MyController {
    use Sample;

    function testMethod()
    {
        echo 'new test method';
    }
}
5
Roham Rafii

トレイトの例を見てみましょう:

namespace App\Traits;

trait SampleTrait
{
    public function addTwoNumbers($a,$b)
    {
        $c=$a+$b;
        echo $c;
        dd($this)
    }
}

次に、別のクラスで、特性をインポートし、その関数がそのクラスのローカルスコープにあるかのように、thisで関数を使用します。

<?php

namespace App\ExampleCode;

use App\Traits\SampleTrait;

class JustAClass
{
    use SampleTrait;
    public function __construct()
    {
        $this->addTwoNumbers(5,10);
    }
}
1
Plabon Dutta