我发现laravel 5.2中“控制器”和“模型”之间的区别非常模糊。
我使用artisan创建一个RESTful控制器,在store方法中,我尝试创建一个新对象。
// store in the database
$car = new App\Models\CarModel;
然后我得到如下错误:
Class 'carfreak\Http\Controllers\App\Models\CarModel' not found
所以这一切似乎都归结为控制器的命名空间,但我不明白。
名称空间描述了控制器,对吗? 那么为什么我参考模型,建立在控制器路径上?它不应该与它有任何关系......对吗?
编辑:在尝试了各种建议之后,我得出结论有三件事要看:
每个似乎都是正确的,但我仍然得到它无法找到模型的错误
答案 0 :(得分:1)
这是php中的命名空间问题。
你就这样使用。
$car = new \App\Models\CarModel;
或
use App\Models\CarModel;
....
class {
$car = new CarModel;
}
答案 1 :(得分:1)
首先检查模型文件中的名称空间,在模型文件中定义名称空间
namespace App\Http\Models;
然后使用
use App\Http\Models\CarModel;
答案 2 :(得分:0)
您需要在班级的顶部添加use
语句。
尝试:
use carfreak\Models\CarModel;
class ...
这假设您的模型位于carfreak\Models
命名空间中,位于Models
/ App
文件夹中的carfreak
文件夹中,否则您只需要use carfreak\CarModel;
。
答案 3 :(得分:0)
我相信您刚刚运行artisan命令来创建模型,而您没有将CarModel
文件移动到Models文件夹。 (如果我错了,请纠正我)
所以在你的控制器中在类声明之前添加这个:
use carfreak\CarModel;
然后,您可以在控制器的任何位置访问模型,如下所示:
$car = new CarModel;
答案 4 :(得分:0)
嗯,这是。我通过问自己这个问题解决了这个问题:如果我在命名空间,参考和组织我的模型时遇到了很多麻烦,那么也许我可以让工匠为我做这件事。
让我思考不同的帖子是Mansoor Akhtar的建议:How do I instruct artisan to save model to specific directory?
让工匠第一次在正确的位置制作模型。
php artisan make:model Models/CarModel
在Controller中,正确引用模型
use name-of-app\Models\CarModel;
我的问题可能有也可能没有缓存刷新问题。每次更改后我都会重新启动我的XAMPP,以确保不涉及缓存。我也试过了
php artisan cache:clear