Laravel 模型目录和命名空间

Laravel model directory and namespace

我从 Laravel 5 开始,作为首要任务,我想将所有模型移动到一个名为 Models 的文件夹中。

但是我如何在不指定名称空间的情况下访问它们,如下所示?:

...

class UserRolesTableSeeder extends Seeder {

    public function run()
    {
        DB::table('user_roles')->delete();

        App\Models\UserRoles::create(['name' => 'CREATE_USER']);
    }

}

进入您的 composer.json 并在 "autoload" 末尾添加:"classmap" 这一行 "app/models"。这样你就告诉 laravel 自动加载这些类。之后,运行 作曲家更新,它应该可以工作。

您还可以创建服务提供者来访问没有命名空间的模型。

要创建服务提供商,您需要执行以下操作:

1) 在您的模型目录中创建一个文件并将其命名为 ModelsServiceProvider.php

2) 在里面写这段代码

<?php
namespace App\Models;

use Illuminate\Support\ServiceProvider;

class ModelsServiceProvider extends ServiceProvider {

public function register()
{

    $this->app->booting(function()
    {
        $loader = \Illuminate\Foundation\AliasLoader::getInstance();
        $loader->alias('UserRoles', 'App\Models\UserRoles');

    });

}

3) 进入 app/config/app.php 并在 providers 数组下添加此行 'App\Models\ModelsServiceProvider'

您也可以在 app/config/app.php.

内的别名数组下直接添加 类 的别名

或者,您可以像以前一样将模型加载到全局命名空间中!违背文档有点可怕,但到目前为止我们还没有遇到任何问题。

为确保您的模型仍然加载,您只需添加对 composer.json:

的引用

(假设您的命名空间是 App\Models)

"autoload": {

    "classmap": [
        ...
        "app/Models/"
    ],
    ...
    "": [
        "app/Models/"
    ]

一定要运行composer dump-autoload