我有一个使用 Slim 框架(第 3 版)的 API。项目结构在根目录下有一个api目录。在其中我有“controllers”、“models”、“public”、“src”等的目录,以及我的 composer.json 和 vendor(一旦运行 composer install)。我的 Controller 都有命名空间“App\Controllers”,composer.json 有
"psr-4": {
"App\\": ""
}
在自动加载中定义。在击中路线时,我正在调用我的 Controller (例如 App\Controllers\AccountController:login)。所有这些在我的 vagrant 环境中工作正常,但是一旦我将它上传到我的生产服务器(共享主机并且我将整个 api 目录从我的本地环境删除到共享主机中的 public_html 目录),我得到
Type: RuntimeException
Message: Callable App\Controllers\AccountController does not exist
File: /home/downunde/public_html/api/vendor/slim/slim/Slim/CallableResolver.php
Line: 62
#0 /home/downunde/public_html/api/vendor/slim/slim/Slim/CallableResolverAwareTrait.php(45): Slim\CallableResolver->resolve('App\Controllers...')
#1 /home/downunde/public_html/api/vendor/slim/slim/Slim/Route.php(314): Slim\Routable->resolveCallable('App\Controllers...')
#2 /home/downunde/public_html/api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(116): Slim\Route->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#3 /home/downunde/public_html/api/vendor/slim/slim/Slim/Route.php(297): Slim\Route->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#4 /home/downunde/public_html/api/vendor/slim/slim/Slim/App.php(441): Slim\Route->run(Object(Slim\Http\Request), Object(Slim\Http\Response))
#5 /home/downunde/public_html/api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(116): Slim\App->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#6 /home/downunde/public_html/api/vendor/slim/slim/Slim/App.php(337): Slim\App->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#7 /home/downunde/public_html/api/vendor/slim/slim/Slim/App.php(298): Slim\App->process(Object(Slim\Http\Request), Object(Slim\Http\Response))
#8 /home/downunde/public_html/api/public/index.php(52): Slim\App->run()
#9 {main}
两台服务器都是 apache,PHP v. 5.6。我确认它已正确到达路线,但在共享主机上找不到我的 Controller 。
最佳答案
你应该像这样编辑你的 composer.json
:
"autoload": {
"psr-4": {
"App\\": ""
}
},
"require": {
// ...
},
"scripts": {
// ...
}
和dependencies.php
// PagesController
$container['PagesController'] = function ($container)
{
return new \App\Controller\PagesController;
};
接下来,你更新你的自动加载
$ composer dump-autoload -o
对不起我的英语...
关于php - SlimPHP Callable 不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35947270/