SlimPHP Callable不存在

时间:2016-03-11 18:21:58

标签: php slim

我有一个使用Slim框架的api(版本3)。项目结构在根目录中有一个api目录。在其中我有“控制器”,“模型”,“公共”,“src”等的dirs,以及我的composer.json和供应商(曾经运行作曲家安装)。我的控制器都有名称空间“App \ Controllers”,而composer.json有

"psr-4": {
    "App\\": ""
}

在自动加载中定义。在点击路线时,我正在呼叫我的控制器(例如App.Controllers \ AccountController:login)。所有这些在我的流浪环境中都能正常工作,但是一旦我将它上传到我的生产服务器(共享主机,我将整个api dir从我的本地环境中删除到共享主机中的public_html目录),我得到了

  

输入:RuntimeException

     

消息:Callable App \ Controllers \ AccountController不存在

     

档案:/home/downunde/public_html/api/vendor/slim/slim/Slim/CallableResolver.php

     

行: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 \响应))

     

#3 /home/downunde/public_html/api/vendor/slim/slim/Slim/Route.php(297):Slim \ Route-> callMiddlewareStack(Object(Slim \ Http \ Request),Object(Slim \ HTTP \响应))

     

#4 /home/downunde/public_html/api/vendor/slim/slim/Slim/App.php(441):Tlim \ Route-> run(Object(Slim \ Http \ Request),Object(Slim \ HTTP \响应))

     

#5 /home/downunde/public_html/api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(116):Slim \ App-> __ invoke(Object(Slim \ Http \ Request),Object(Slim \ HTTP \响应))

     

#6 /home/downunde/public_html/api/vendor/slim/slim/Slim/App.php(337):Slim \ App-> callMiddlewareStack(Object(Slim \ Http \ Request),Object(Slim \ HTTP \响应))

     

#7 /home/downunde/public_html/api/vendor/slim/slim/Slim/App.php(298):Slim \ App->进程(对象(Slim \ Http \ Request),对象(Slim \ HTTP \响应))

     

#8 /home/downunde/public_html/api/public/index.php(52):Slim \ App-> run()

     

#9 {main}

两个服务器都是apache,PHP v.5.6。我确认它正确地命中了路线,但是在共享主机上它无法找到我的控制器。

3 个答案:

答案 0 :(得分:6)

您应该像这样编辑composer.json

"autoload": {
    "psr-4": {
        "App\\": ""
    }
},
"require": {
    // ...
},
"scripts": {
    // ...
}

dependencies.php

// PagesController
$container['PagesController'] = function ($container)
{
    return new \App\Controller\PagesController; 
};

接下来,您更新了自动加载

$ composer dump-autoload -o

抱歉我的英文......

答案 1 :(得分:3)

很幸运,这是一个案例问题。如果你在Windows上本地,请记住你不区分大小写。

当您使用Linux时,您将获得区分大小写的环境。

Windows-Linux的案例问题是一个常见问题。尝试使用vagrant或任何其他方法来拥有相同的本地和非本地环境。

答案 2 :(得分:2)

这是由于区分大小写。不确定为什么它在本地工作但不在共享主机上工作。