Laravel模型目录和命名空间

时间:2015-02-11 20:25:42

标签: php laravel namespaces laravel-5

我开始使用Laravel 5,作为第一项业务,我想将所有模型移动到名为Models的文件夹中。

但是如何在不指定命名空间的情况下访问那些?如下所示?:

...

class UserRolesTableSeeder extends Seeder {

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

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

}

2 个答案:

答案 0 :(得分:4)

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

您还可以创建服务提供程序以访问没有名称空间的模型。

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

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中的别名数组下的类添加别名。

答案 1 :(得分:0)

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

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

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

"autoload": {

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

请务必运行composer dump-autoload