How to use traits in Laravel 5.4.18? How to use traits in Laravel 5.4.18? laravel laravel

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