【问题标题】:Troubleshooting referencing a model in a laravel controller在 laravel 控制器中引用模型的疑难解答
【发布时间】:2016-07-30 10:11:20
【问题描述】:

我一直在尝试解决 laravel 5.2 应用程序 (carfreak) 中的错误,但未成功。

FatalErrorException in PropertyController.php line 85: Class 'App\Models\CarModel' not found

我已将默认用户模型移动到文件夹 app/models 并进行了必要的更改,以便一切正常。

现在我有一个新控制器 CarController 和一个新模型 CarModel,它们只是无法正常工作。名称空间似乎是一个如此简单的问题,但我无法解决它。

  • models 文件夹中有模型吗?是的。 carfreak\app\Models\CarModel.php
  • 控制器命名空间是否正确?是的...namespace carfreak\Http\Controllers;
  • 控制器是否引用模型?是的...use App\Models\CarModel;
  • 模型命名空间是否正确?是的...namespace carfreak\Models;

我可以通过使用CarController 来创建不同版本的错误,但我想不出任何排列方式。

编辑:添加了控制器和模型...

编辑:添加了更多细节:

具有讽刺意味的是,我可以 php artisan make:model sanityCheck 并且它将在 \app 根目录中创建一个模型(即不在 app\models 中)......并且可以很好地调用该模型。如果我将 CarController 放回根目录,并适当地更改它的命名空间,它仍然不起作用。这几乎就像我在类名或其他东西中有一些愚蠢的拼写错误,但我已经将类名复制并粘贴到我的文件名、类声明、“使用”声明等中。仍然。没有。工作。啊!

//这是汽车模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class CarModel extends Model
{
    //

    /**
     * The attributes that are mass assignable.
     * @var array
     */
    protected $fillable = [
    'colourOfCar',
    ];

}

//这是汽车控制器

<?php

namespace carfreak\Http\Controllers;

use Illuminate\Http\Request;
//use \carfreak\app\Models\CarModel;
use App\Models\CarModel;


class CarController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */

    public function __construct()
    {
        $this->middleware('auth');
    }


    public function store(Request $request)
    {

       // validate the data
        $this->validate($request, array(
                'CarColour' => 'required|max:50'
            ));

        // store in the database
        $newCar = new CarModel;
dd($request);       


    }

}

【问题讨论】:

  • 发布您的CarModel 文件
  • 还有你的CarController文件
  • 两个词,NamespaceUse.... 是正确命名并位于正确路径中的文件。如果您有 Linux 服务器,这包括外壳。
  • 添加了代码。是的,我知道它是命名空间和使用......但无论我如何输入该死的东西,它都不起作用。 Windows 10。
  • 这看起来不对use \carfreak\app\Models\CarModel; 应该是use App\Models\CarModel 不?

标签: php laravel-5.2


【解决方案1】:

这看起来不对,使用\carfreak\app\Models\CarModel; 应该在this is carController 中使用App\Models\CarModel

大小写在 Linux 上很重要。命名空间通常在 PSR Aloader 中用于查找文件。 Linux 文件系统区分大小写。所以CareModel.php文件应该位于App/Models/CarModel.php

但我从未使用过 Laravel...

【讨论】:

  • 我没有使用 linux。我将控制器中的 i 行更改为 App\Models\CarModel.. 没有区别
【解决方案2】:

嗯,就是这样。我通过问自己这个问题解决了这个问题:如果我在命名空间、引用和组织我的模型时遇到很多麻烦,那么也许我可以让工匠为我做这件事。

让我产生不同想法的帖子是 Mansoor Akhtar 的建议:How do I instruct artisan to save model to specific directory?

  1. 让工匠第一次在正确的地方制作模型。 php artisan make:model Models/CarModel

  2. 在 Controller 中,正确引用模型 use name-of-app\Models\CarModel;

  3. 我的问题可能涉及也可能不涉及缓存刷新。每次更改后,我最终都会重新启动我的 XAMPP,以确保不涉及缓存。我也试过 php artisan cache:clear

【讨论】:

    猜你喜欢
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2014-08-29
    • 2011-10-27
    • 1970-01-01
    相关资源
    最近更新 更多