私はPHP APIを作成しており、DBHandlerからリクエストを引き出す関数を呼び出しています。私は '/出席者'機能を取得すると、私は正しくデータを取得します。しかし、私は、APIの各呼び出しに認証を追加したい。 DBHandlerにパラメータを渡して、使用する接続文字列を指定します(複数あるように)。文字列にnullが定義されている場合は、標準の接続文字列が使用されます。PHP 2回呼び出すと関数内のオブジェクトを再宣言できません
'認証'機能には標準の接続文字列が必要ですが、 '/出席者'のgetには別の接続文字列が必要です。前述のように '/ attendees'はそれ自身でうまく動作しますが、sqlを実行しようとすると認証エラーが発生します。認証は別の接続文字列を使用していて、接続を何とか上書きしているためです。
require_once '../include/DbHandler.php';
require_once '../include/PassHash.php';
require '.././libs/Slim/Slim.php';
ini_set('display_errors', 1);
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
$user_id = NULL;
function authenticate(\Slim\Route $route) {
$headers = apache_request_headers();
$response = array();
$app = \Slim\Slim::getInstance();
$dm_config = null;
if (isset($headers['Auth'])) {
$db = new DbHandler($dm_config);
$api_key = $headers['Auth'];
if (!$db->isValidApiKey($api_key)) {
$response["error"] = true;
$response["message"] = "Access Denied. Invalid Api key";
echoRespnse(401, $response);
$app->stop();
} else {
$response["error"] = false;
$response["message"] = "Auth Accepted";
}
} else {
$response["error"] = true;
$response["message"] = "Api key is misssing";
echoRespnse(400, $response);
$app->stop();
}
}
$app->get('/attendees','authenticate', function() {
global $event_id;
$headers = apache_request_headers();
$event_id = $headers['Eventid'];
$dm_config = $headers['Dm'];
$user_id = null;
$response = array();
$db = new DbHandler($dm_config);
$result = $db->getAttendees($user_id, $event_id);
$response["error"] = false;
$response["nav"] = array();
while ($task = $result->fetch_assoc()) {
$tmp = array();
$tmp["ea.id"] = $task["ea.id"];
array_push($response["nav"], $tmp);
}
echoRespnse(200, $response);
});
同じオブジェクトを呼び出すが、別々に使用する関数を取得するにはどうすればよいですか?
ルーキーミスの下に述べたようにグローバル変数$デシベルとの両方の機能のグローバルキーワードでアクセスを行うことができますが、残念ながら(認証 'でどんな違い – gsusonline
がありません) '変数' $ dm_config'はnullとしてコンストラクタに渡されます。これは意図的ですか? – iliaz
はい、コンストラクタは、指定されたconnenction文字列を使用するためにnullが指定されているかどうかを知っています – gsusonline