Я создал новую "песню" Class Called.

Расположение класса app / ClassName, поэтому его app / songs.php

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

Мой маршрут:

Route::get('/','SongsController@index');

Расположение My SongsController.php: app / Http / controller / 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

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

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

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

0
sanainfotech 26 Дек 2015 в 21:50

2 ответа

Лучший ответ

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

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

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

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

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

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

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

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

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

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

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

2
Community 20 Июн 2020 в 09:12

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

composer dump-autoload -o

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

0
Kokno 27 Дек 2015 в 07:36