Laravel 5:类 'App\Http\Controllers\Category' 找不到。

3

我正在按照Laravel的tuts教程学习,但是自从我安装了Laravel 5后,出现了一些错误。

代码

public function getIndex() {
        return View::make('categories.index')
            ->with('categories', Category::all());
    }

这个函数出现了两个错误

Class 'App\Http\Controllers\Category' not found
Class 'App\Http\Controllers\views' not found

我知道这是由于Laravel 5中的不同命名空间导致的。对于第二个错误,我尝试在文件开头添加use view,但它找不到视图。请问这些文件位于哪个目录?

谢谢。

2个回答

3
这两个类都不在你的控制器中。View类是Illuminate框架的一部分,另一个可能是你创建的Model类。
当你在php文件中使用一个新类时,你必须包含它或者使用use
对于你的Category类,你最有可能这样做: use App\Category,这应该解决了那个问题。
你的View类稍微复杂一些。如果你使用的IDE可以导入类,那么做起来就容易得多,这样你就不必记住命名空间/类名。但是,如果没有,你需要知道要使用哪个类以及何时使用它。在这种情况下,你需要这样做: use View,这应该解决了这个问题。
因此,在你的控制器声明之上和命名空间之下,你必须放置use调用。
<?php namespace App\Http\Controllers

// I'm removing this because there is a way not to even have to use this...
// use View;
use App\Category;

class YourController extends Controller {
    ...
}

如我在评论中提到的,有更好的方式。你可以使用帮助函数view()来返回视图,而不用像您当前做法那样展示视图。

您只需要更改以下内容:
return View::make('categories.index')->with('categories', Category::all());

to

return view('categories.index', ['categories' => Category::all()]);
    or
return view('categories.index')->with('categories',Category::all())

消除混淆的类错误。

应用您的方法后出现了“Call to undefined method Illuminate\View\View::make()”错误。 - Vikram Anand Bhushan
谢谢Ben,你说得对。我忘记那是一个选择。 - Cayce K
@CayceK 虽然使用 view() 助手函数可以解决问题,但它并不能帮助 OP 弄清楚当前解决方案为什么不起作用,因此也无法帮助 OP 理解如何在将来使用其他类,比如没有助手函数的类。 - Ben Swinburne
1
@CayceK 这个可以用,use App\categories_table; use Illuminate\View\View; - Vikram Anand Bhushan
@Vikram 自从你做了那个评论,我就不会这样做了。这更直接地针对你的设置。Laravel 遵循着相当常见的命名结构。我认为最好还是保持原样,因为在大多数情况下,你 技术上 应该将你的类别命名为相同的名称,但显然并非总是如此。我很高兴这对你有所帮助! - Cayce K
显示剩余5条评论

2

在文件顶部,在namespace声明下面添加以下内容:

use Illuminate\Support\Facades\View;
use App\Category;

1
你的 Category 类定义在哪里?我假设它是在 app 目录下定义的,命名空间为 App; - pinkal vansia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接