【问题标题】:how to load Laravel 6 model classes without namespace如何在没有命名空间的情况下加载 Laravel 6 模型类
【发布时间】:2020-04-10 10:09:43
【问题描述】:

我是 Laravel 的新手,我正在开发 Laravel 4。我正在尝试在 docker 上迁移到 Laravel 6,我已经完成了基本设置,并且 Laravel 项目已经启动。

我在模型文件夹中创建了一个表和一个相应的 Eloquent 模型。我能够读取控制器中的数据。

namespace App\Http\Controllers;

use mysql_xdevapi\Exception;
use  App\Models\Card;

class welcomeController {
    public function show() {
        try {
            $cards = Card::all();
        } catch (\Exception $e) {
            die("Could not connect - " . $e );
        }

        print_r($cards); exit;
    }
}

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Card extends Model
{

}

在旧版本的 Laravel 项目中,'Card::all()' 在不使用 USE 命令导入的情况下工作。

我知道命名空间很重要,但想知道它是如何工作的以及如何进行相同的复制。

【问题讨论】:

  • "在旧版本的 Laravel 项目中,'Card::all()' 在不使用 USE 命令的情况下工作" - 我使用的是旧版本的 Laravel ,我可以确认这是不是的情况。如果您不导入类,它将默认为当前类的命名空间,在本例中为App\Http\Controllers,并且您没有类App\Http\Controllers\Card。虽然,Laravel 4 是一个非常旧的版本......也许是这样,但不管怎样。您需要在当前版本中正确导入它们。

标签: php laravel namespaces


【解决方案1】:

我不知道你为什么要放弃使用命名空间,如果你不想为你的模型使用namespaces,请编辑你的composer.json,如下所示

"autoload": {
    "psr-4": {
        "App\\": "app/"
    },
    "classmap": [
        "database/seeds",
        "database/factories",
        "models"
    ]
},

在您的根目录中创建一个目录并添加一个新文件,即“models/Card.php”。

下面应该是你Card.php的内容

<?php 

use \Illuminate\Database\Eloquent\Model;

class Card extends Model {

    //database table here
    protected $table = "cards";

    //Fillables
    protected $fillable = [];
    
}

在你的控制器中WelcomeController

<?php

namespace App\Http\Controllers;

use mysql_xdevapi\Exception;

class welcomeController {
    public function show() {
        try {
            $cards = \Card::all();
        } catch (\Exception $e) {
            die("Could not connect - " . $e );
        }

        print_r($cards); exit;
    }
}

不要忘记卡片模型中的正斜杠,即 '\Card::all()'

确保将您的models 文件夹移到app 目录之外,请注意这不是php 最佳做法

【讨论】:

  • 我在 app 目录中有模型,并在自动加载中添加了“app/models”,但没有工作。我会试试这个。谢谢
  • 它没有用。我得到未定义的索引:模型错误。提供者下的 auth.php 中的“'models' => App\User::class”会导致问题吗?
  • 你需要composer dump-autoload
  • 当模型文件夹在应用程序中时尝试,即“app/models”也
  • 我已经编辑了我的答案,现在应该可以了。我试过了,效果很好,可能你错过的是正斜杠 \Card::all()
猜你喜欢
  • 2019-02-22
  • 2014-10-09
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
相关资源
最近更新 更多