現在、いくつかのデータベースを管理するためのRESTful APIを開発中です。理想的に私は私のアプリケーション内の別のルートから自分のAPIルートを呼び出すことができる必要がありますか?Slim APIの既存の内部ルートを呼び出すことができません
私はsubRequest
を使用して、既存のルートを無駄に呼び出そうとしました。 郵便配達で、私のルートを実行しながら、私が得るすべては以下の通りです:以下
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title>Slim Application Error</title>
<style>body{margin:0;padding:30px;font:12px/1.5 Helvetica,Arial,Verdana,sans-serif;}h1{margin:0;font-size:48px;font-weight:normal;line-height:48px;}strong{display:inline-block;width:65px;}</style>
</head>
<body>
<h1>Slim Application Error</h1>
<p>A website error has occurred. Sorry for the temporary inconvenience.</p>
</body>
</html>
は、テーブル内のすべての企業を取得すると
companies
テーブルに新しい会社を置くために私の
companies.php
APIのルートです。別の経路、内
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
// Get all companies
$app->get('/companies', function(Request $request, Response $response) {
$sql = "SELECT * FROM companies";
try {
// Get DB Object
$db = new db();
// Connect
$db = $db->connect();
$stmt = $db->query($sql);
$companies = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo '{"data":' . json_encode($companies) . '}';
} catch(PDOException $e) {
echo '{"error": { "text":' . $e->getMessage() . '}}';
}
});
// Add new company to companies table
$app->put('/new/company/{companyName}', function(Request $request, Response $response) {
$newCompany = $request->getAttribute('companyName');
$insert_sql = "INSERT INTO companies (company_name) VALUE (:newCompany)";
try {
$db = new db();
$db = $db->connect();
$insert_stmt = $db->prepare($insert_sql);
$newCompany = str_replace("'", "", $newCompany);
$insert_stmt->bindParam(':newCompany', $newCompany);
$insert_stmt->execute();
$newID = $db->lastInsertId();
$db = null;
echo '{"notice": {"text": "New Company Added (cid: '.$newID.')"}';
} catch(PDOException $e) {
echo '{"error": { "text":' . $e->getMessage() . '}}';
}
});
、私はPUT->'/new/company'
ルートを実行したいと思います。だから、私は以下を置くどこか内:
$destinationComp = "myNewCompany";
$res = $this->subRequest('PUT', '/new/company/' . $destinationComp);
echo $res;
私はポストマンから手動でPUT要求を行ったかのように私の出力ではなく、最初のコードセクションに表示されているエラーの、同じであると期待されます。
さらに、私はむしろ$this
より変数$app
を通じて定期的な要求を行うことを希望してuse ($app)
が含まれるように、私のルートの呼び出しを変更しようとしました、働いていなかった場合$this
です。どのように見える:
$app->put('/new/site/{sourceCompany}/{sourceProperty}/{destinationCompany}/{destinationProperty}', function(Request $request, Response $response) use ($app) {
$destinationComp = "myNewCompany";
$res = $app->put("/new/company/$destinationComp");
echo $res;
//More code to follow...
}
実行時に郵便番号で同じエラーメッセージを受信するのみ。
提案がありますか?
ありがとうございました。明らかに私のセットアップの唯一の順列は、私は試していない、良い目! –
私はそれ以来、私の会社のAPIを変更して、新しい会社の作成が '/ company?name = companyName'へのPUTリクエストであるというような、パラメータを使用するようにしました。 どこでもパラメータを使用してsubRequestsの例を見つけることはできません。 –
スタックオーバーフローに関する別の質問をし、問題の概要を説明する必要があります。 – Scriptonomy