我常常發現本身但願在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