ファイルを正確に作成する場所、書き込む場所、トレイトで宣言されている関数の使用方法の例が必要です。 使用Laravel Framework 5.4.18
-私はフレームワークのどのフォルダーも変更していません、すべてが対応する場所です-
もうすでにありがとうございます。
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
も使用できます
特性の説明:
トレイトは、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';
}
}
トレイトの例を見てみましょう:
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);
}
}