2015-12-26 62 views
0

我创建了一个新班级,称为“歌曲”。新班级名称“Song”扩展Laravel 5 Model Class not found

位置类的应用程序的/类名,所以它的应用程序/ 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 

如果我使用不添加类“宋”优良样板工程。代码如下提前

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

谢谢,对不起,我是新来的Lavaral 5

+2

该类被称为'歌曲',文件被称为'歌曲'。他们需要匹配。它应该是'Song.php' –

+0

嗨@BenSwinburne,谢谢你的即时答复。是的只要我匹配课程名称和文件名称,错误就会消失。 – sanainfotech

+0

你能解释一下为什么我们需要将类和文件名匹配成相同的。 – sanainfotech

回答

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结尾的文件名。文件名必须匹配终止类名的大小写。

0

试试这个命令:

composer dump-autoload -o 

编辑:此命令更新与自动加载磁带机新班级。 更多信息:https://getcomposer.org/doc/03-cli.md#dump-autoload

+0

您可以在[编辑]中解释为什么此代码回答问题?仅限代码答案[阻止](http://meta.stackexchange.com/q/148272/274165),因为他们没有教导解决方案。 –