How to use traits in Laravel 5.4.18?
I have Create a Traits directory in my Http
directory with a Trait called BrandsTrait.php
and use it like:
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(); }}
Here is my BrandsTrait.php
<?phpnamespace App\Http\Traits;use App\Brand;trait BrandsTrait { public function brandsAll() { // Get all the brands from the Brands Table. $brands = Brand::all(); return $brands; }}
Note: Just like a normal function written in a certain namespace
, you can use traits
as well
Trait description:
Traits are a mechanism for code reuse in single inheritance languages such as PHP. A Trait is intended to reduce some limitations of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes living in different class hierarchies. The semantics of the combination of Traits and classes is defined in a way which reduces complexity and avoids the typical problems associated with multiple inheritance and Mixins.
The solution
Make a directory in your App, named Traits
Create your own trait in Traits
directory ( file: Sample.php ):
<?phpnamespace App\Traits;trait Sample{ function testMethod() { echo 'test method'; }}
Then use it in your own controller:
<?phpnamespace App\Http\Controllers;use App\Traits\Sample;class MyController { use Sample;}
Now the MyController
class has the testMethod
method inside.
You can change the behavior of trait methods by overriding them it in MyController
class:
<?phpnamespace App\Http\Controllers;use App\Traits\Sample;class MyController { use Sample; function testMethod() { echo 'new test method'; }}
Let's look at an example trait:
namespace App\Traits;trait SampleTrait{ public function addTwoNumbers($a,$b) { $c=$a+$b; echo $c; dd($this) }}
Then in another class, just import the trait and use the function with this
as if that function was in the local scope of that class:
<?phpnamespace App\ExampleCode;use App\Traits\SampleTrait;class JustAClass{ use SampleTrait; public function __construct() { $this->addTwoNumbers(5,10); }}