这是我的原始代码:
E
注意 $app->post('/api/user', function (Request $request, Response $response, array $args) use ($tokenAuth) {
$tokenAuth->parseHeaders(); // validate token
//...do stuff with $tokenAuth data
$response->getBody()->write(json_encode(...)));
return $response;
});
这允许我在方法中使用这个对象。
我如何以同样的方式使用此方法?
use ($tokenAuth)
当路由在UserController类中命中时,它可以正常工作:
$app->post('/api/user', \UserController::class . ':add');
如何将class UserController {
public function add($request, $response, $args) { ...}
}
传递给此人?
答案 0 :(得分:1)
您可以将$tokenAuth
和UserController
注册到依赖关系管理器,并通过依赖注入机制将$tokenAuth
传递给UserController
。例如:
<?php
namespace Your\Own\NameSpace;
use Your\Own\NameSpace\TokenAuth;
class UserController
{
private $tokenAuth;
public function __construct(TokenAuth $tokenAuth)
{
$this->tokenAuth = $tokenAuth;
}
public function add($request, $response, $args)
{
$this->tokenAuth->parseHeaders();
...
}
}
在您的依赖注册码中(假设使用Pimple):
<?php
use Your\Own\NameSpace\TokenAuth;
use Your\Own\NameSpace\UserController;
$container[TokenAuth::class] = function ($c) {
return new TokenAuth();
};
$container[UserController::class] = function ($c) {
$tokenAuth = $c->get(TokenAuth::class);
return new UserController($tokenAuth);
};
答案 1 :(得分:0)
我最终使用中间件在路线上进行身份验证:
$mw = function($request, $response, $next){
$tokenAuth = new \TokenAuth();
$tokenAuth->parseHeaders();
$response = $next($request, $response);
return $response;
};
$app = new \Slim\App();
$app->post('/api/user', \UserController::class . ':add')->add($mw);
$app->run();
答案 2 :(得分:-1)
看一下您的原始代码,您可以使用$tokenAuth
(并且它有效),这意味着您之前已全局定义它。
因此,在您的add
方法中,只需将其声明为全局变量:global $tokenAuth;
然后使用它;
public function add($request, $response, $args) {
global $tokenAuth;
$tokenAuth->parseHeaders();
...
}