我创建了新的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的新手。
答案 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