New Class Name "Song" Extends Laravel 5 Model Class not found

- 1 answer


I have created new Class Called "song".

Location of the class app/ClassName , so its app/songs.php

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

My Route:

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

My SongsController.php location: app/Http/controller/SongsController.php

Wanting to correspond my database table called "songs".

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'));

Now with all these code, I get a simple error says as below,

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

If I use without adding class "Song" model works fine. The code is as below


Thanks in Advance, Sorry I am new to Lavaral 5.




Your class is called Song and the file is called songs.php. You need to name the file Song.php in order for it to be found.

Composer generates a PSR-4 compatible autoloader.

You'll notice in your composer.json file you have a section like this

"autoload": {
    "classmap": [
    "psr-4": {
        "App\\": "app/"

This tells the Autoloader that anything in the App namespace should be found within the app directory.

When classes are called, any registered autoloaders attempt to load the class file. This means that App\Song looks for app/Song.php unless you specify otherwise.

From the specification

When loading a file that corresponds to a fully qualified class name ...

A contiguous series of one or more leading namespace and sub-namespace names, not including the leading namespace separator, in the fully qualified class name (a "namespace prefix") corresponds to at least one "base directory".

The contiguous sub-namespace names after the "namespace prefix" correspond to a subdirectory within a "base directory", in which the namespace separators represent directory separators. The subdirectory name MUST match the case of the sub-namespace names.

The terminating class name corresponds to a file name ending in .php. The file name MUST match the case of the terminating class name.