2017-08-29 12 views
-1

Dies ist der ContactsController:Warum kann ich ein Modell nicht in einem Controller verwenden?

<?php 

namespace App\Http\Controllers; 

use App\Contact; 
use Illuminate\Http\Request; 

class ContactsController extends Controller 
{ 
    . 
    . 
    . 
    public function edit($id) 
    { 
     $contact = Contact::find($id); 
     print_r(App\Group::find(1)); 
     return view('contacts.edit'); 
    } 
    . 
    . 
    . 
} 

Die Contact.php und Group.php Modelle sind bereits in app Ordner erstellt. Das Problem ist, ich kann App\Group::find(1) innerhalb einer .blade.php Datei verwenden, aber ich kann es nicht in einer Methode eines Controllers verwenden. Mein Code meldet folgende Fehler

Class 'App \ Http \ Controllers \ Gruppe nicht gefunden

Ich habe auch versucht print_r(Group::find(1)); die gleichen Fehler gemeldet.

dank

+2

fügen Sie Ihr Modell diesem Controller hinzu. vor dem calss schreibe einfach benutze App \ Contact; Wenn Ihr Modell im App-Ordner ist, geben Sie den Pfad an, in dem sich Ihr Modell befindet. –

+0

@KuldeepMishra Ich weiß, dass das funktioniert, aber warum in einer '.blade.php' Datei muss ich' App \ Group' nicht hinzufügen? – Drupalist

+0

Sie sollten in Ihren Ansichten nicht auf Modelle zugreifen. Ihr Controller sollte Ihren Ansichten die Daten übermitteln, die sie benötigen. –

Antwort

1

use App\Group; zum Anfang der Datei hinzufügen, die Klasse zu importieren.

+0

Ich weiß, dass das funktioniert, aber warum in einer '.blade.php' Datei muss ich' App \ Group' nicht hinzufügen? – Drupalist

+0

Weil die '.blade' Dateien im globalen Namespace erstellt werden. Wenn Sie also in Ihrer Sicht auf "App \ Group" verweisen, kann das Modell gefunden werden. Wenn Sie jedoch in Ihrem Controller sind und auf das Modell verweisen, sucht es relativ zum aktuellen Namespace - wörtlich "App \ Http \ Controllers \ Group". Sie haben also zwei Möglichkeiten - fügen Sie 'use' am Anfang hinzu, um PHP anzuweisen, einen anderen Namespace zu verwenden, oder verwenden Sie einen vorangestellten Schrägstrich wie' \ App \ Group', der PHP anweist, ihn aus dem Root-Namespace zu holen. – Dwight

1

unter Leitung hinzufügen nach Gebrauch App \ Kontakt

Nutzung App \ Gruppe

+0

Ich weiß, dass das funktioniert, aber warum in einer '.blade.php' Datei muss ich' App \ Group' nicht hinzufügen? – Drupalist

1

Sie können Ihr Modell mit use Namespace\Model; importieren Sie können auch voll qualifizierte Namespaces verwenden, damit Sie sie nicht über Ihre Datei importieren müssen. Sie können vollständig qualifizierte Namespaces verwenden, indem Sie vor Ihrem Namespace einen umgekehrten Schrägstrich einfügen. Sie können dies in Ihren Blade-Vorlagen tun.

Sie können das tun, oder Sie können Fassaden verwenden, vielleicht mischen Sie sie.

Verwandte Themen