Laravel 5 和 Laravel 5.1 “找不到类‘模型名称’”,有更好的解决方案吗?

Posted

技术标签:

【中文标题】Laravel 5 和 Laravel 5.1 “找不到类‘模型名称’”,有更好的解决方案吗?【英文标题】:Laravel 5 and Laravel 5.1 "Class 'Model Name' not found", is there better solution? 【发布时间】:2015-12-12 03:34:28 【问题描述】:

我是 Laravel 的新手,但我遇到了一些问题。 在 Laravel 4 中一切正常。我为数据库配置做了所有步骤。 ,创建模型,一切正常。

在 Laravel 5/5.1 中没有 Models 文件夹,默认情况下 Models 存储在 App 文件夹中,但如果我创建 Model 'Example.php':

namespace App;

use Illuminate\Database\Eloquent\Model;

class Example extends Model

protected $table = 'examples';

并尝试在 routes.php 中获取它:

Route::get('/', function()

$example = new Example;

return $example::all();
);

我看到一个错误:“找不到类'示例'”。 我发现解决方案只是添加到 route.php:

use App\Example;

但是,有没有更好的解决方案? 我必须为每个模型添加“使用”吗? 例如,如果我有 2-3-4-5-etc 模型,我必须输入:

use App\Example;
use App\Example1;
use App\Example2;

是的,我在 Laravel 文档、其他论坛等中进行搜索。如果您执行与 Laravel 5.1 文档相同的步骤 - 数据库配置、创建模型、使用它,您将收到此错误。

将路径添加到 composer.json "autoload" 和 - composer dump-autoload,没有帮助。

【问题讨论】:

那么你必须使用:"use App\Models\Example;",对于每个模型,我都在问其他的。 你必须习惯它,它会给你的代码带来大量的组织。 【参考方案1】:

你也可以使用这样的直接方法

    Route::get('/', function()

$example = new App\Example;
return $example::all();
);

但我仍然更喜欢默认方法。正如你现在看到的那样,每次我使用模型时,我都必须在前面 App

【讨论】:

【参考方案2】:

假设您有两个类 Example,一个是模型,另一个是其他东西,位于其他位置。 PHP 无法知道您要使用哪一个。 这就是为什么如果您尝试在像 routes.php 这样的文件中使用类,它将无法找到它,除非您指定它或使用它的完整路径(如 App\Model\Example)。

现在,一个很好的问题是你为什么在 routes.php 中有逻辑? 为了代码清晰和概念分离,不建议您编写实际逻辑(或视图)或该文件中路由定义以外的任何内容。

建议您实际上重构代码并将处理请求的每组逻辑移动到实际控制器,然后定义哪个控制器处理那里的路径。

这样你最终将没有use 语句,你的routes.php 实际上会非常干净且易于阅读,你最终会得到这样的结果:

Route::resource('example', 'ExampleController');
Route::resource('admin', 'AdminController');
Route::resource('user', 'UserController');

这也会告诉你在哪里可以找到什么逻辑。

【讨论】:

以上是关于Laravel 5 和 Laravel 5.1 “找不到类‘模型名称’”,有更好的解决方案吗?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 索引和创建授权

laravel 5.1部署到 集成环境 lnmp上

Laravel 5.1 - 验证用户名、密码和如果确认 = 1

VerifyCsrfToken 中的 TokenMismatchException - Laravel 5.1

laravel 5.1中的PDF图像缩略图预览?

[ Laravel 5.1 文档 ] 架构 —— 应用目录结构