请问如何更改Scaffold Generator生成的Model文件的路径?
因为习惯了 laravel 的 Model 路径,不想每次新建项目都去改很多文件,就没有更改,使用默认路径app/
。
但是 Scaffold Generator 生成的 Model 文件路径是app/Models/
。
尝试查看 Scaffold Generator 的源代码,可惜对于我这个初学者还是太难,看不明白。
请问有什么办法能够更改生成 Model 的默认路径?
大佬太忙,尝试自己解决…
我在 fork 了 Summer 大佬的源码进行修改之后,放到GitHub上
后续:为了使用方便,在 Summer 大佬源代码的基础上做了修改路径等工作,然后传到 Packagist 了。所以有同样不想改 Model 路径的小伙伴可以不用手动更改了,直接用 composer 安装:
composer require tomcath/generator
手动操作看下面
通过阅读源码后,找到了生成 Model 相关的文件。
修改几个文件源码,如果各位大佬有更好的方法或者哪里有遗漏,希望能在评论指出。
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'; } . . . } . . .
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)'); } . . . } . . .
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)'); } . . . } . . .
修改以下几个模版文件中的命名空间:
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"
推荐文章: