So verwenden Sie Traits – Laravel 5.2

Lesezeit: 2 Minuten

Benutzer-Avatar
David

Ich bin neu bei Traits, aber ich habe eine Menge Code, der sich in meinen Funktionen wiederholt, und ich möchte Traits verwenden, um den Code weniger chaotisch zu machen. Ich habe eine gemacht Traits Verzeichnis in meinem Http Verzeichnis mit einem Merkmal namens BrandsTrait.php. Und alles, was es tut, ist, alle Marken anzurufen. Aber wenn ich versuche, BrandsTrait in meinem Products Controller aufzurufen, so:

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

es gibt mir eine Fehlermeldung Methode [BrandsTrait] ist nicht vorhanden. Soll ich etwas initialisieren oder anders nennen?

Hier ist mein 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();
    }
}

Denken Sie an Merkmale wie das Definieren eines Abschnitts Ihrer Klasse an einem anderen Ort, der von vielen Klassen geteilt werden kann. Durch Platzierung use BrandsTrait In Ihrer Klasse gibt es diesen Abschnitt.

Was du schreiben willst ist

$brands = $this->brandsAll();

Das ist der Name der Methode in Ihrem Merkmal.

Vergessen Sie auch nicht, eine Rücksendung zu Ihrer hinzuzufügen brandsAll Methode!

  • Ich kann dies mit Vererbung erreichen, was bieten die Eigenschaften zusätzlich?

    – José Rojas

    15. April 2016 um 23:15 Uhr

  • PHP unterstützt keine Mehrfachvererbung und erlaubt Ihnen daher nur, eine einzelne Klasse zu erweitern. Bei Merkmalen können Sie jedoch so viele verwenden, wie Sie möchten.

    – Thomas Maddocks

    16. April 2016 um 2:06 Uhr


  • Wenn Sie über die Struktur Ihres Objekts nachdenken, sollte die Vererbung außerdem wirklich Objekten mit ähnlichen Verantwortlichkeiten vorbehalten sein. Eigenschaften können jedoch nur verwendet werden, um zwei Teile von Klassen zu TROCKNEN, die möglicherweise keine ähnlichen Verantwortlichkeiten, aber ähnliche Methoden haben.

    – Umfassend

    16. April 2016 um 7:27 Uhr

  • @JoseRojas Ja, die Merkmale und die Vererbung können ähnlich aussehen. Aber der Unterschied lässt sich so erklären: Die Hundeklasse wird von den Bulldog- und Mops-Klassen geerbt, aber nicht von Ragdoll (es ist eine Katzenrasse), obwohl das Merkmal „Essen“ von allen drei genannten Klassen verwendet werden kann. 🙂

    – Abhishek

    17. April 2016 um 8:02 Uhr


Benutzer-Avatar
Sonford Son Onyango

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

1143850cookie-checkSo verwenden Sie Traits – Laravel 5.2

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy