2015-12-26 3 views
0

Я создал новый класс, названный «песня».Новое название класса «Песня» Расширяет Laravel 5 Модель Класс не найден

Расположение класса приложения/ИмяКласса, поэтому его приложения/songs.php

<?php 
namespace App; 
use Illuminate\Database\Eloquent\Model as Eloquent; 
class Song extends Eloquent { 
//put your code here 
} 

Мой Маршрут:

Route::get('/','[email protected]'); 

Мои SongsController.php местоположение: приложение/HTTP/контроллер/SongsController. php

Желание соответствовать моей таблице базы данных под названием «песни».

<?php 
namespace App\Http\Controllers; 
use Illuminate\Http\Request; 
use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use App\Song; 

class SongsController extends Controller 
{ 

public function index() 
{ 
$songs = Song::get(); 

return view('pages.songsList',compact('songs')); 
} 

Теперь со всем этим кодом, я получаю просто ошибка говорит, как показано ниже,

FatalErrorException in SongsController.php line 19: 
Class 'App\Song' not found 

Если я использую без добавления модель класса «Song» работает отлично. Код ниже

DB::table('songs)->get(); 

Заранее спасибо, Извините, я новичок в Lavaral 5.

+2

Класс называется 'song', а файл называется' песни'. Они должны соответствовать. Это должно быть 'Song.php' –

+0

Привет @BenSwinburne, Спасибо за мгновенный ответ. Да. Как только я сопоставил имя класса и имя файла, ошибка исчезла. – sanainfotech

+0

Можете ли вы объяснить, почему нам нужно сопоставлять имя класса и файла как одно и то же. – sanainfotech

ответ

2

Ваш класс называется Song и файл называется songs.php. Вам нужно указать файл Song.php, чтобы его можно было найти.

Композитор генерирует совместимый автозагрузчик PSR-4.

Вы заметите в файле composer.json у вас есть раздел, как этот

"autoload": { 
    "classmap": [ 
     "database" 
    ], 
    "psr-4": { 
     "App\\": "app/" 
    } 
}, 

Это говорит автозагрузчик, что все в App имен должно быть найдено в каталоге app.

Когда классы вызываются, любые зарегистрированные автозагрузчики пытаются загрузить файл класса. Это означает, что App\Song ищет app/Song.php, если вы не указали иначе.

Из спецификации

При загрузке файла, который соответствует полное имя класса ...

Непрерывный ряд имен один или более ведущих пространств имен и суб-пространства имен, не включая ведущий разделитель пространства имен, в имени полного класса («префикс пространства имен») соответствует, по крайней мере, одному «базовому каталогу».

Смежные имена подпространств после «префикса пространства имен» соответствуют подкаталогу в «базовом каталоге», в котором разделители пространства имен представляют собой разделители каталогов. Имя подкаталога ДОЛЖНО соответствовать случаю имен под-имен.

Терминное имя класса соответствует имени файла, заканчивающегося на .php. Имя файла ДОЛЖНО соответствовать случаю завершающего имени класса.

0

Попробуйте эту команду:

composer dump-autoload -o 

EDIT: эту команду обновить автозагрузчика с новые классы. Подробнее: https://getcomposer.org/doc/03-cli.md#dump-autoload

+0

Не могли бы вы [редактировать] объяснить, почему этот код отвечает на вопрос? Кодовые ответы [обескуражены] (http://meta.stackexchange.com/q/148272/274165), потому что они не учат решению. –

Смежные вопросы