新课程名称"歌曲"扩展未找到的Laravel 5模型类

时间:2015-12-26 18:50:32

标签: class laravel model eloquent extends

我创建了新的Classled" song"。

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

我的SongsController.php位置:app / Http / controller / SongsController.php

想要对应我的数据库表&#34;歌曲&#34;。

<?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

如果我在没有添加课程的情况下使用&#34; Song&#34;模型工作正常。代码如下

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

先谢谢,对不起我是Lavaral 5的新手。

2 个答案:

答案 0 :(得分:2)

您的班级名为Song,文件名为songs.php。您需要将文件命名为Song.php才能找到它。

Composer会生成PSR-4兼容的自动加载器。

你会在你的composer.json文件中注意到你有一个这样的部分

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

这告诉Autoloader App命名空间中的任何内容都应该在app目录中找到。

调用类时,任何已注册的自动加载器都会尝试加载类文件。这意味着App\Song会查找app/Song.php,除非您另行指定。

来自规范

  

加载与完全限定类名相对应的文件时......

     

完全限定类名称(“名称空间前缀”)中的一个或多个前导命名空间和子命名空间名称的连续系列(不包括前导命名空间分隔符)对应于至少一个“基目录”。

     

“名称空间前缀”之后的连续子命名空间名称对应于“基本目录”中的子目录,其中名称空间分隔符表示目录分隔符。子目录名称必须与子命名空间名称的大小写匹配。

     

终止类名对应于以.php结尾的文件名。文件名必须与终止类名称的大小写匹配。

答案 1 :(得分:0)

尝试此命令:

composer dump-autoload -o

编辑:此命令使用新类更新自动加载器。 更多信息:https://getcomposer.org/doc/03-cli.md#dump-autoload