如何加载没有命名空间Laravel 6建模类

mrzz3bfm  于 2023-01-21  发布在  其他
关注(0)|答案(2)|浏览(138)

我是新来的laravel,我是工作在laravel 4。我试图迁移到laravel 6的docker,我有基本的设置和laravel项目是了。
我在models文件夹中创建了一个表和一个相应的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命令导入的情况下工作。
我知道名称空间很重要,但我想知道它是如何工作的,以及如何使复制相同。

anauzrmj

anauzrmj1#

我不知道你为什么要放弃使用命名空间,如果你不想为你的模型使用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最佳做法

zynd9foi

zynd9foi2#

命名空间只是php最糟糕的特性之一。我们几乎没有摆脱需要添加'include'或'require'语句无处不在(感谢autoloader),现在我们必须添加'use'语句...愚蠢,尤其是在法语键盘上,需要一分钟才能到达反斜杠键。想想看:命名空间最初是为了避免类名重复(这在我25年多的C++和PHP编程中从未发生过)...

相关问题