ToroPHP类未找到问题:MVC框架路由控制器分离后报错
解决ToroPHP路由中控制器类未找到的问题
这问题核心是Composer PSR-4自动加载规则和控制器的命名空间不匹配导致的,下面是一步步的修复方案:
1. 给HomeController添加对应命名空间
修改app/controllers/HomeController.php,补充和Composer配置对应的命名空间:
<?php namespace Links\Controllers; class HomeController { function get() { echo "hello world"; } }
2. 更新路由中的类名(使用完整命名空间)
在public/index.php的路由配置里,把类名改成带命名空间的完整路径:
<?php require_once __DIR__ . '/../vendor/autoload.php'; ToroHook::add("404", function() { echo "404 - Not Found"; }); Toro::serve(array( "/" => "Links\\Controllers\\HomeController" )); ?>
3. 重新生成Composer自动加载文件
因为调整了命名空间和自动加载的关联,需要让Composer更新它的自动加载映射,在项目根目录运行:
composer dump-autoload
问题原因说明
- 你的
composer.json配置了PSR-4规则:"Links\\Controllers\\": "app/controllers",这意味着只有归属Links\Controllers命名空间的类,Composer才会从app/controllers目录去查找。之前的HomeController没有命名空间,自动加载器自然找不到它。 - ToroPHP的路由需要指定类的完整标识符(包含命名空间),如果只写
HomeController,它会在全局命名空间下查找,找不到我们放在Links\Controllers下的类,最终抛出类未找到或触发404错误。
内容的提问来源于stack exchange,提问作者Karan Shrivastav
相关产品推荐
相关产品推荐

