2017-02-17 14 views
0

私は、APIの作成に役立つPHPとSlim Frameworkの新機能です。 $app->postまたはgetの中に私がdbを照会するとすべてがOKです。しかし、私はそれを通常の機能に分けたいと思う。後で他のAPIで使用する必要がある場合に役立ちます。スリムフレームワーク - 通常の機能でdbを照会する方法

私は私のisTokenValid()機能

function isTokenValid($token){ 
    $sql = 'SELECT id FROM users WHERE token = :token'; 
    $s = $app->db->prepare($sql); //<< this line 25 
    $s->bindParam(':token', $token); 
    if ($s->execute()){ 
     if($sth->rowCount() > 0){ 
      return true; 
     } 
    } 
    return false; 
} 

この

$app->get('/search/[{phone}]', function($request, $response, $args) use ($app){ 
    $token = $response->getHeader('token'); 
    // $phone = $args['phone']; 
    if (isTokenValid($token)){ 
     return $this->response->withJson("valid"); 
    } 
    return $this->response->withJson("invalid"); 

}); 

を呼び出そうとしました。しかし、私は$app外でそれを呼び出すためにどのように500 Internal Server Error

Type: Error 
Message: Call to a member function prepare() on null 
File: /Applications/MAMP/htdocs/aigoido/src/functions.php 
Line: 25 

を取得しますか?ありがとう。

答えて

0

パラメーターとして関数に$appを渡します。この関数はそれ自身のコンテキストを持っているので、$ appはそれがなければ利用できません。

function isTokenValid($token, $app){ 
    $sql = 'SELECT id FROM users WHERE token = :token'; 
    $s = $app->db->prepare($sql); //<< this line 25 
    $s->bindParam(':token', $token); 
    if ($s->execute()){ 
     if($sth->rowCount() > 0){ 
      return true; 
     } 
    } 
    return false; 
} 
+0

こんにちは。私はあなたが言ったことを編集しましたが、私は新しいエラー 'nullのメンバー関数準備()を呼び出します。ありがとう。 – TruongHieu

+0

@TruongHieuは関数呼び出しの中でパラメータを追加しましたか? – jmattheis

0

データベース接続の依存性注入コンテナを作成し、そのオブジェクトをappオブジェクトではなく関数パラメータとして渡したいとします。これにより、アプリケーション全体でdb接続が再利用可能になります。

https://www.slimframework.com/docs/concepts/di.html

また、あなたはかなりの$ this - >応答よりも$応答を返すことができます。

$c = $app->getContainer(); 

$c['db'] = function() { 
    return new DB($host,$user,$pass,$name); 
}; 

$app->post('/search/[{phone}]', function($request, $response, $args) use ($c) { 
    $token = $response->getHeader('token'); 
    // $phone = $args['phone']; 
    if (isTokenValid($c->db,$token)){ 
     return $response->withJson("valid"); 
    } 
    return $response->withJson("invalid");  
}); 


function isTokenValid($db, $token){ 
    $sql = 'SELECT id FROM users WHERE token = :token'; 
    $s = $db->prepare($sql); 
    $s->bindParam(':token', $token); 
    if ($s->execute()){ 
     if($sth->rowCount() > 0){ 
      return true; 
     } 
    } 
    return false; 
} 
関連する問題