在nwidart Modules中使用appzcoder/crud-generator指定生成路径遇崩溃问题
在nwidart Modules中配置appzcoder/crud-generator生成代码到模块路径的解决办法
先纠正你之前的问题
直接修改vendor目录下的文件不可取:一是composer update会覆盖所有修改,二是你写的代码存在语法错误($rootNamespace = '/Module/Crud'末尾缺少分号,且命名空间格式错误,应该用Modules\Crud而非路径格式),这也是程序崩溃的核心原因。
下面是几种可靠的解决方案:
方案一:自定义Crud命令(推荐,灵活可控)
创建继承自原扩展命令的自定义命令,重写路径逻辑,彻底避免修改vendor文件:
- 创建自定义命令文件
app/Console/Commands/ModuleCrudControllerCommand.php:
<?php namespace App\Console\Commands; use Appzcoder\CrudGenerator\Commands\CrudControllerCommand; class ModuleCrudControllerCommand extends CrudControllerCommand { // 自定义命令名称 protected $name = 'module:crud:controller'; // 重写控制器命名空间,指定到目标模块下 protected function getDefaultNamespace($rootNamespace) { // 可根据需求改成动态参数,比如通过--module参数传入模块名 $moduleName = 'Crud'; return "Modules\\{$moduleName}\\Http\Controllers"; } // 若需修改视图生成路径,同步重写视图路径方法 protected function getViewPath() { $moduleName = 'Crud'; return base_path("Modules/{$moduleName}/Resources/views"); } }
- 在
app/Console/Kernel.php中注册这个命令:
protected $commands = [ \App\Console\Commands\ModuleCrudControllerCommand::class, ];
- 运行自定义命令生成代码:
php artisan module:crud:controller PostController --model=Post
方案二:通过扩展配置文件修改路径
如果扩展支持配置自定义路径,先发布官方配置文件:
php artisan vendor:publish --provider="Appzcoder\CrudGenerator\CrudGeneratorServiceProvider"
打开生成的config/crudgenerator.php,修改控制器和视图的路径配置:
return [ 'path' => [ // 替换为目标模块的控制器路径 'controller' => base_path('Modules/Crud/Http/Controllers'), // 替换为目标模块的视图路径 'view' => base_path('Modules/Crud/Resources/views'), ], // 其他配置保持默认即可 ];
之后直接运行原Crud命令,代码就会生成到模块路径下。
方案三:命令行参数动态指定
原扩展命令支持通过参数直接指定命名空间和视图路径,无需修改任何代码:
# 仅指定控制器命名空间到模块 php artisan crud:controller PostController --model=Post --controller-namespace="Modules\Crud\Http\Controllers" # 同时指定视图路径 php artisan crud:controller PostController --model=Post --controller-namespace="Modules\Crud\Http\Controllers" --view-path="Modules/Crud/Resources/views"
内容的提问来源于stack exchange,提问作者Hamideh Mirzaee
相关产品推荐
相关产品推荐

