某些方法无法解析
Some method is not resolvable
从事 API 项目。一切都很好,直到我必须添加一个新的端点(也是新方法)并且我的新端点得到了这个错误,另一个端点 运行 很好。以下是错误日志:
Type: RuntimeException
Message: [{“container”:{}},“getNotification”] is not resolvable
File: /opt/myanime/api/vendor/slim/slim/Slim/CallableResolver.php
Line: 104
Trace
#0 /opt/myanime/api/vendor/slim/slim/Slim/CallableResolver.php(62): Slim\CallableResolver->assertCallable(Array)
#1 /opt/myanime/api/vendor/slim/slim/Slim/CallableResolverAwareTrait.php(45): Slim\CallableResolver->resolve(‘UserController:…’)
#2 /opt/myanime/api/vendor/slim/slim/Slim/Route.php(333): Slim\Routable->resolveCallable(‘UserController:…’)
#3 /opt/myanime/api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(122): Slim\Route->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#4 /opt/myanime/api/vendor/slim/slim/Slim/Route.php(316): Slim\Route->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#5 /opt/myanime/api/vendor/slim/slim/Slim/App.php(476): Slim\Route->run(Object(Slim\Http\Request), Object(Slim\Http\Response))
#6 /opt/myanime/api/src/MyanimeMiddleware.php(121): Slim\App->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#7 [internal function]: App\MyanimeMiddleware->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#8 /opt/myanime/api/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(App\VestiaMiddleware), Array)
#9 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#10 /opt/myanime/api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(73): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#11 /opt/myanime/api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(122): Slim\App->Slim{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#12 /opt/myanime/api/vendor/slim/slim/Slim/App.php(370): Slim\App->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#13 /opt/myanime/api/vendor/slim/slim/Slim/App.php(295): Slim\App->process(Object(Slim\Http\Request), Object(Slim\Http\Response))
#14 /opt/myanime/api/public/index.php(35): Slim\App->run()
#15 {main}
我的新端点路线:
$app->get('/user/notification', 'UserController:getNotification');
我的class:
class UserController{
public function __construct($container)
{
// make the container available in the class
$this->container = $container;
}
public function getNotification($request, $response, $args){
//my code here
}
}
我的dependencies.php
:
use App\Controllers\UserController;
$container = $app->getContainer();
$container['UserController'] = function ($c) {
return new UserController($c);
};
我的composer.json
{
"name": "slim/slim-skeleton",
"autoload": {
"psr-4": {
"App\": "src/"
}
}
}
尝试 composer dump-autoload
但没有成功。
根据提供的代码,'UserController:getNotification'
不是有效的可调用对象。使用静态函数 'UserController::getNotification'
或构造 UserController 并将 array($controller, "getNotification")
传递给 $app->get()
.
PHP 找不到您的 class.
- 在 index.php
中需要它
- 修复您的 PSR-0/4 自动加载架构,然后转储自动加载
不小心rsync
到服务器的时候。我上传到错误的目录 Controller
而不是 Controllers
。
我遇到了类似的问题,我遇到了。在我的例子中,Slim 无法实例化控制器 class 因为它只是拼写错误。
从事 API 项目。一切都很好,直到我必须添加一个新的端点(也是新方法)并且我的新端点得到了这个错误,另一个端点 运行 很好。以下是错误日志:
Type: RuntimeException
Message: [{“container”:{}},“getNotification”] is not resolvable
File: /opt/myanime/api/vendor/slim/slim/Slim/CallableResolver.php
Line: 104
Trace
#0 /opt/myanime/api/vendor/slim/slim/Slim/CallableResolver.php(62): Slim\CallableResolver->assertCallable(Array)
#1 /opt/myanime/api/vendor/slim/slim/Slim/CallableResolverAwareTrait.php(45): Slim\CallableResolver->resolve(‘UserController:…’)
#2 /opt/myanime/api/vendor/slim/slim/Slim/Route.php(333): Slim\Routable->resolveCallable(‘UserController:…’)
#3 /opt/myanime/api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(122): Slim\Route->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#4 /opt/myanime/api/vendor/slim/slim/Slim/Route.php(316): Slim\Route->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#5 /opt/myanime/api/vendor/slim/slim/Slim/App.php(476): Slim\Route->run(Object(Slim\Http\Request), Object(Slim\Http\Response))
#6 /opt/myanime/api/src/MyanimeMiddleware.php(121): Slim\App->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#7 [internal function]: App\MyanimeMiddleware->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#8 /opt/myanime/api/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(App\VestiaMiddleware), Array)
#9 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#10 /opt/myanime/api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(73): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#11 /opt/myanime/api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(122): Slim\App->Slim{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#12 /opt/myanime/api/vendor/slim/slim/Slim/App.php(370): Slim\App->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#13 /opt/myanime/api/vendor/slim/slim/Slim/App.php(295): Slim\App->process(Object(Slim\Http\Request), Object(Slim\Http\Response))
#14 /opt/myanime/api/public/index.php(35): Slim\App->run()
#15 {main}
我的新端点路线:
$app->get('/user/notification', 'UserController:getNotification');
我的class:
class UserController{
public function __construct($container)
{
// make the container available in the class
$this->container = $container;
}
public function getNotification($request, $response, $args){
//my code here
}
}
我的dependencies.php
:
use App\Controllers\UserController;
$container = $app->getContainer();
$container['UserController'] = function ($c) {
return new UserController($c);
};
我的composer.json
{
"name": "slim/slim-skeleton",
"autoload": {
"psr-4": {
"App\": "src/"
}
}
}
尝试 composer dump-autoload
但没有成功。
'UserController:getNotification'
不是有效的可调用对象。使用静态函数 'UserController::getNotification'
或构造 UserController 并将 array($controller, "getNotification")
传递给 $app->get()
.
PHP 找不到您的 class.
- 在 index.php 中需要它
- 修复您的 PSR-0/4 自动加载架构,然后转储自动加载
不小心rsync
到服务器的时候。我上传到错误的目录 Controller
而不是 Controllers
。
我遇到了类似的问题,我遇到了。在我的例子中,Slim 无法实例化控制器 class 因为它只是拼写错误。