2016-07-30 13 views
0

Ich habe erfolglos versucht, einen Fehler in einer Laravel 5.2 App (Carfreak) zu beheben.Fehlerbehebung bei der Referenzierung eines Modells in einem Laravel-Controller

FatalErrorException in PropertyController.php line 85: Class 'App\Models\CarModel' not found

Ich habe den Standard-Benutzermodell in einen Ordner app/Modelle und machte die erforderlichen Änderungen so bewegt, dass es funktioniert gut.

Jetzt habe ich einen neuen Controller CarController, und ein neues Modell, CarModel, die gerade nicht funktionieren. Es scheint ein so einfaches Problem mit Namespaces zu sein, aber ich kann es nicht lösen.

  • ist das Modell im Ordner Modelle? Ja. carfreak\app\Models\CarModel.php
  • ist der Controller-Namespace korrekt? Ja ... namespace carfreak\Http\Controllers;
  • referenziert der Controller das Modell? Ja ... use App\Models\CarModel;
  • ist der Modell-Namespace korrekt? Ja ... namespace carfreak\Models;

Ich bin in der Lage verschiedene Versionen des Fehlers zu erstellen, indem Sie mit den CarController spielen, aber keine Permutation ich gearbeitet hat denken können.

EDIT: Controller und Modell hinzugefügt ...

EDIT: Mehr Details hinzugefügt:

Die Ironie dabei ist, dass ich kann php artisan make:model sanityCheck und es wird ein Modell in der \app Wurzel erstellen (dh nicht in app \ models) ... und dieses Modell kann als gut bezeichnet werden. Wenn ich meinen CarController wieder in den Stammordner zurücksetze und seinen Namespace entsprechend ändere, funktioniert es immer noch nicht. Es ist fast so, als hätte ich einen dummen Schreibfehler im Klassennamen oder so, aber ich habe Klassennamen in meinen Dateinamen, Klassen-Deklaration, "Benutze" -Deklarationen usw. kopiert und eingefügt. immer noch. nicht. Arbeit. Aargh!

// diese carmodel ist

<?php 

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 

class CarModel extends Model 
{ 
    // 

    /** 
    * The attributes that are mass assignable. 
    * @var array 
    */ 
    protected $fillable = [ 
    'colourOfCar', 
    ]; 

} 

// diese carController ist

<?php 

namespace carfreak\Http\Controllers; 

use Illuminate\Http\Request; 
//use \carfreak\app\Models\CarModel; 
use App\Models\CarModel; 


class CarController extends Controller 
{ 
    /** 
    * Display a listing of the resource. 
    * 
    * @return \Illuminate\Http\Response 
    */ 

    public function __construct() 
    { 
     $this->middleware('auth'); 
    } 


    public function store(Request $request) 
    { 

     // validate the data 
     $this->validate($request, array(
       'CarColour' => 'required|max:50' 
      )); 

     // store in the database 
     $newCar = new CarModel; 
dd($request);  


    } 

} 
+0

Ihre Post 'CarModel' Datei – jaysingkar

+0

Ihr auch' CarController' – jaysingkar

+0

Zwei Worte Datei, 'Namespace' und' Use' .... die Datei korrekt benannt ist und in der richtigen Lage Pfad. Das schließt Gehäuse mit ein, wenn Sie einen Linux-Server haben. – ArtisticPhoenix

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 habe auch versucht php artisan cache:clear

0

Diese falsche Verwendung sieht \carfreak\app\Models\CarModel; sollte Gebrauch App\Models\CarModel in this is carController

Gehäuse sein ist wichtig, auf Linux. Der Namensraum wird normalerweise in einem PSR Aloader verwendet, um die Datei zu finden. Und Linux-Dateisystem unterscheidet zwischen Groß- und Kleinschreibung. So ist die CareModel.php Datei sollte in App/Models/CarModel.php

gelegen sein, aber ich nie Laravel verwendet ...

+0

und ich benutze nicht Linux. Ich änderte die Zeile in der Steuerung zu 'App \ Models \ CarModel'. Macht keinen Unterschied – Maxcot

Verwandte Themen