【问题标题】:Laravel model directory and namespaceLaravel 模型目录和命名空间
【发布时间】:2015-04-12 09:11:25
【问题描述】:

我从 Laravel 5 开始,作为第一笔生意,我想将我所有的模型移动到一个名为 Models 的文件夹中。

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

...

class UserRolesTableSeeder extends Seeder {

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

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

}

【问题讨论】:

    标签: php laravel namespaces laravel-5


    【解决方案1】:

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

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

    要创建服务提供者,您必须执行以下操作:

    1) 在你的models目录下创建一个文件,命名为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 中的 aliases 数组下直接为类添加别名。

    【讨论】:

    • 谢谢,我记得我不久前做过类似的事情。 1分钟内接受!另一个问题,如果我的应用被拆分成模块怎么办?我是否只需将每个模块模型的所有路径添加到 .json 文件中?
    • 是的,如果你想让这些类自动加载!
    • 请注意,按照我在评论中的建议,您必须运行作曲家更新。
    • 将“app/Models”添加到 json 文件后,它告诉我找不到类 UserRoles :(
    • 我编辑了我的评论!要在没有名称空间的情况下访问它,您必须定义该服务提供者或按照我在那里的建议添加别名。此外,您应该从命名空间中删除应用程序,无论您在哪里执行此操作,包括类定义!
    【解决方案2】:

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

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

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

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

    一定要运行composer dump-autoload

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 2011-05-23
      • 2012-09-10
      • 2015-04-13
      • 2012-07-08
      • 2023-03-11
      • 2022-12-31
      • 1970-01-01
      相关资源
      最近更新 更多