Laravel在非App命名空间创建模型与控制器的问题
解决Laravel自定义目录下生成模型与控制器的问题
我看你正卡在Laravel里往自定义Domain和Http目录生成模型、控制器的问题上——默认命令总是把文件塞到App目录,试了好几种命令都不对,好不容易用../Domain/User搞定了模型,结果控制器又出问题。咱们来把这个问题捋顺:
问题核心:PSR-4配置与命令命名空间不匹配
先看你的Composer自动加载配置:
"autoload": { "psr-4": { "App\\": "app/App/", "Domain\\": "app/Domain/", "Http\\": "app/Http/", "Support\\": "app/Support/" } }
你之前用相对路径的方式其实是绕开了Laravel基于命名空间映射目录的规则,这就导致控制器生成时出现冲突——因为make:controller默认会套用Laravel自带的App\Http\Controllers命名空间,和你的自定义Http命名空间不兼容。
正确生成模型的姿势
别用相对路径,直接通过命名空间指定就好。因为你的Domain命名空间已经映射到app/Domain/目录,所以执行这条命令:
php artisan make:model Domain\\User
如果怕转义字符出问题,也可以用引号包裹:
php artisan make:model "Domain\User"
这样Artisan会自动把User.php生成到app/Domain/下,并且自动设置正确的命名空间namespace Domain;,比相对路径规范多了,也不会留下后续的加载隐患。
搞定控制器生成的问题
同样的逻辑,针对Http目录的控制器,直接用命名空间指定:
php artisan make:controller Http\\UserController
或者引号版本:
php artisan make:controller "Http\UserController"
这条命令会把UserController.php生成到app/Http/目录,同时自动设置命名空间namespace Http;,完美匹配你的Composer配置,不会再出现生成位置或命名空间错误的问题。
收尾:更新自动加载
不管你用哪种方式生成文件,最后记得执行这条命令更新Composer的自动加载映射,确保命名空间能正确对应到目录:
composer dump-autoload
内容的提问来源于stack exchange,提问作者Dikkepanda
相关产品推荐
相关产品推荐

