0

几个小时以来我一直在努力解决这个问题,但我似乎无法弄清楚这个问题,基本上我有一个库文件,它在所有地方都被调用并且在任何地方都可以正常工作,除了我在这里调用它的地方.

在我尝试访问 db 对象并查询任何内容之前,我可以变得苗条以正常工作吗?我可能很昏暗,但这或多或少正是它在苗条的文档中所说的方式,并在其中添加了几行额外的行,因此停止工作是没有意义的。

    require_once "libary.php";
    require 'Slim/Slim.php';
    \Slim\Slim::registerAutoloader();

    $app = new \Slim\Slim();

    $app->get('/login/:username/:password', function ($username, $password) {
  //check the login details against the db...
    echo "I SEE THIS";
    $query = "select * from sometable";
    $db->query($query);
    echo "I DONT SEE THIS";

    });
    $app->run();
4

3 回答 3

1

很抱歉响应缓慢,相当尴尬,但只需要在该内联函数中插入一行代码:

全球 $db

我曾假设(错误地)该变量在函数中是可见的,因为它是在我们的库中定义的。

谢谢

马克

于 2012-10-29T11:45:55.260 回答
1

您可以避免将 GLOBAL 与use关键字一起使用(PHP >= 5.3.0):

$app->get('/login/:username/:password', function ($userstrong textname, $password) use ($db) {
    //check the login details against the db...
    echo "I SEE THIS";
    $query = "select * from sometable";
    $db->query($query);
    echo "I DONT SEE THIS";
});
于 2014-02-26T10:31:57.080 回答
1

您还可以将数据库作为单例注入应用程序,因此:

$app->container->singleton('db', function () use ($dbcfg){
    return new \myDatabaseClass($dbcfg);
});

然后它将始终在此处提供给您:

$app->db->query();

有关更多详细信息,请参见:http: //docs.slimframework.com/#DI-Overview

于 2014-03-26T16:52:49.813 回答