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 - 验证用户名、密码和如果确认 = 1