请问如何更改Scaffold Generator生成的Model文件的路径?

因为习惯了 laravel 的 Model 路径,不想每次新建项目都去改很多文件,就没有更改,使用默认路径app/

但是 Scaffold Generator 生成的 Model 文件路径是app/Models/

尝试查看 Scaffold Generator 的源代码,可惜对于我这个初学者还是太难,看不明白。

请问有什么办法能够更改生成 Model 的默认路径?


大佬太忙,尝试自己解决…

我在 fork 了 Summer 大佬的源码进行修改之后,放到GitHub上

GitHub修改后的源码

后续:为了使用方便,在 Summer 大佬源代码的基础上做了修改路径等工作,然后传到 Packagist 了。所以有同样不想改 Model 路径的小伙伴可以不用手动更改了,直接用 composer 安装:

composer require tomcath/generator


手动操作看下面

通过阅读源码后,找到了生成 Model 相关的文件。

修改几个文件源码,如果各位大佬有更好的方法或者哪里有遗漏,希望能在评论指出。

  1. MakerTrait.php
    具体路径: vendor/Summerblue/Generator/Makes/MakerTrait.php

    .
    .
    .
    protected function getPath($file_name, $path='controller')
    {
     .
     .
     .
     elseif($path == "model")
     {
           return './app/'.$file_name.'.php';
     }
     elseif($path == "model-trait")
     {
           return './app/Traits/'.$file_name.'Operation.php';
     }
     .
     .
     .
    }
    .
    .
    .
  2. MakeModelObserver.php
    具体路径: vendor/Summerblue/Generator/Makes/MakeModelObserver.php

    .
    .
    .
    protected function registerObserver($model, $observer_name)
    {
     .
     .
     .
     if (strpos($content, $observer_name) === false) {
    
       // Using UserOberser as anchor
           if (strpos($content, 'App\User') === false) {
               $content = str_replace(
               "public function boot()
     {",
               "public function boot()\n\t{\n\t\t\App\User::observe(\App\Observers\UserObserver::class);\n",
               $content
               );
           }
    
           $content = str_replace(
               'App\User::observe(\App\Observers\UserObserver::class);',
    "App\User::observe(\App\Observers\UserObserver::class);\n\t\t\App\\$model::observe(\App\Observers\\$observer_name::class);",
               $content
               );
           $this->files->put($path, $content);
    
          return $this->scaffoldCommandObj->info('+ ' . $path . ' (Updated)');
      }
     .
     .
     .
    }
    .
    .
    .
  3. MakePolicy.php
    具体路径: vendor/Summerblue/Generator/Makes/MakePolicy.php

    .
    .
    .
    protected function registerPolicy($model, $policy_name)
    {
     .
     .
     .
      if (strpos($content, $policy_name) === false) {
           $content = str_replace(
               'policies = [',
               "policies = [\n\t\t \App\\$model::class => \App\Policies\\$policy_name::class,",
               $content
               );
           $this->files->put($path, $content);
    
          return $this->scaffoldCommandObj->info('+ ' . $path . ' (Updated)');
       }
     .
     .
     .
    }
    .
    .
    .
  4. 修改以下几个模版文件中的命名空间: vendor/Summerblue/Generator/Stubs/base_model.stub
    vendor/Summerblue/Generator/Stubs/controller.stub
    vendor/Summerblue/Generator/Stubs/factory.stub
    vendor/Summerblue/Generator/Stubs/model.stub
    vendor/Summerblue/Generator/Stubs/observer.stub
    vendor/Summerblue/Generator/Stubs/observer_user.stub
    vendor/Summerblue/Generator/Stubs/policy.stub
    vendor/Summerblue/Generator/Stubs/seed.stub


5.如果已经生成 App/Models/* 可以按下面步骤重置:

migrate 回滚

$ php artisan migrate:rollback

git回滚

$ git checkout . &&  git clean -fd 

然后重新运行

$ php artisan make:scaffold Topic --schema="title:string:index,body:text,user_id:bigInteger:unsigned:index,category_id:integer:unsigned:index,reply_count:integer:unsigned:default(0),view_count:integer:unsigned:default(0),last_reply_user_id:integer:unsigned:default(0),order:integer:unsigned:default(0),excerpt:text:nullable,slug:string:nullable"
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!