我常常发现本身但愿在Laravel应用程序中得到更多关于模型的结构。php
默认状况下,模型位于 App
命名空间内,若是你正在处理大型应用程序,这可能会变得很是难以理解。因此我决定在 App\Models
命名空间内组织个人模型。app
要作到这一点,你须要作的第一件事就是将 User
模型移动到 app/Models
目录并相应地更新命名空间。ide
这要求你更新引用 App\User
类的全部文件。this
第一个是 config/auth.php
:spa
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, // 修改这里 ], ],
第二个是 config/services.php
文件:code
'stripe' => [ 'model' => App\Models\User::class, // 修改这里 'key' => env('STRIPE_KEY'), 'secret' => env('STRIPE_SECRET'), ],
最后,修改 database/factories/UserFactory.php
文件:ip
$factory->define(App\Models\User::class, function (Faker $faker) { ... });
如今咱们已经改变了 User
模型的命名空间,可是如何生成新的模型。正如咱们所知,默认状况下它们将被放置在 App
命名空间下。get
为了解决这个问题,咱们能够扩展默认的 ModelMakeCommand
:string
<?php namespace App\Console\Commands; use Illuminate\Foundation\Console\ModelMakeCommand as Command; class ModelMakeCommand extends Command { /** * Get the default namespace for the class. * * @param string $rootNamespace * @return string */ protected function getDefaultNamespace($rootNamespace) { return "{$rootNamespace}\Models"; } }
并经过将如下内容添加到 AppServiceProvider
中来覆盖服务容器中的现有绑定:io
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Console\Commands\ModelMakeCommand; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { // } /** * Register any application services. * * @return void */ public function register() { $this->app->extend('command.model.make', function ($command, $app) { return new ModelMakeCommand($app['files']); }); } }
以上就是须要修改的。如今咱们能够继续生成模型,就像咱们在咱们的终端中使用的同样:php artisan make:model Order
,它们将位于 App\Models
命名空间中。
但愿你能使用它!
更多PHP知识,可前往PHPCasts