2016-07-28 6 views
0

Ich finde die Unterscheidung zwischen "Controller" und "Model" in Laravel 5.2 sehr verschwommen.Wie referenzieren Sie ein Modell in einem Laravel-Controller?

Ich benutze Handwerker, um einen RESTful Controller zu erstellen, und in der Speichermethode versuche ich, ein neues Objekt zu erstellen.

// store in the database 
$car = new App\Models\CarModel; 

Dann bekomme ich den Fehler wie folgt:

Class 'carfreak\Http\Controllers\App\Models\CarModel' not found 

So ist es alles auf den Namespace des Controllers zu kommen scheint, aber ich verstehe es nicht.

Der Namensraum beschreibt den Controller, richtig? Also warum ist meine Referenz das Modell, auf dem Controller-Pfad gebaut? Es sollte nichts damit zu tun haben ... oder?

EDIT: Nach verschiedenen Vorschläge versuchen, habe ich geschlossen gibt es drei Dinge zu betrachten:

  1. Jede Klasse hat ein Namespace-Set, den Ordner korrekt zu beschreiben, wo die Klasse
  2. liegt in der Region Controller, haben die Anweisung "Use app \ models \ CarModel"
  3. beziehen sich auf das Modell in der Steuerung.

Jeder scheint korrekt zu sein, aber ich habe noch den Fehler, dass es nicht das Modell

Antwort

0

Nun, hier ist es. Ich löste es, indem ich mir diese Frage stellte: Wenn ich so viele Probleme habe, meine Modelle zu benennen, zu referenzieren und zu organisieren, dann kann ich vielleicht Handwerker dazu bringen, das für mich zu tun.

Die Post, die ich denke, bekam anders Rat des Mansoor Akhtar hier: How do I instruct artisan to save model to specific directory?

  1. Handwerker Holen Sie sich das Modell in der richtigen Stelle erstmals zu machen. php artisan make:model Models/CarModel

  2. im Controller Bezugs das Modell richtig use name-of-app\Models\CarModel;

  3. Es nicht Cache in meinem Problem beteiligt sein kann oder Spülung. Ich habe meinen XAMPP irgendwann nach jeder Änderung neu gestartet, um sicherzustellen, dass kein Caching involviert war. Ich versuchte auch php artisan cache:clear

0

Sie benötigen finden können eine use Anweisung an die Spitze Ihrer Klasse hinzuzufügen.

Versuche:

use carfreak\Models\CarModel; 

class ... 

Dies setzt voraus, dass Ihr Modell im carfreak\Models Namespace ist, und in einem Models Ordner in Ihren App/carfreak Ordnern, sonst werden Sie nur use carfreak\CarModel; benötigen.

+0

getan, dass. Doesn; t ändern nichts – Maxcot

+0

Was ist der Namespace Ihres Controllers? –

+0

Namespace Carfreak \ Http \ Controller; – Maxcot

1

Dies ist ein Namespace-Problem in PHP.

Sie verwenden einfach so.

$car = new \App\Models\CarModel; 

oder

use App\Models\CarModel; 
....  
class { 
    $car = new CarModel; 
} 
+0

Sie meinen in meiner Controller-Klasse? Es funktioniert nicht. – Maxcot

+0

Ja, Sie können Laravel Quellcode ... – RryLee

1

Vor allem Platzprüfung Namen in Modelldatei, Namensraum in Modelldatei definieren

namespace App\Http\Models; 

Und verwenden Sie dann

use App\Http\Models\CarModel; 
+0

ok, außer dass meine Struktur App \ Modelle und nicht Apps \ http \ Modelle. Es hilft aber nicht :( – Maxcot

0

Ich glaube, Sie haben gerade den Handwerkerbefehl ausgeführt Erstellen Sie das Modell, und Sie haben die Datei CarModel nicht in den Ordner Modelle verschoben.(Korrigiert mich wenn ich falsch liege)

Also in Ihrem Controller fügen Sie diese vor der Klassendeklaration:

use carfreak\CarModel; 

dann überall in Ihrem Controller Sie das Modell wie folgt zugreifen können:

$car = new CarModel;