【问题标题】:how to use a dependency container in a php file that isn't a class in Slim 3如何在不是 Slim 3 中的类的 php 文件中使用依赖容器
【发布时间】:2017-08-29 15:10:18
【问题描述】:

我的数据库有这个依赖容器。

$container['db'] = function ($container) {
    $db = $container['settings']['db'];
    $conn = db2_connect($db['database'], $db['username'], $db['password']);
    return $conn;
};

我可以像 $conn = $this->db; 这样在我的控制器中使用它来查询我的数据库并返回一个数组。

我正在尝试进行 ajax 调用以在视图中使用数据表。当我为我的 ajax 调用创建一个页面时,它只是一个 php 文件。不是一堂课。如何在这个 php 文件中使用 db 容器?

这是 php 文件。

if ($conn) {
    $sql = "SELECT trannum, 
                   trantype, 
                   tranbatch, 
                   trandate, 
                   username, 
                   trvnum, 
                   tranaccount, 
                   tranamt, 
                   transtatus, 
                   trannumdocs 
            FROM   BD.BDPTV 
                   INNER JOIN BD.BDUSERS 
                           ON BD.BDUSERS.usernumber = BD.BDPTV.tranuser 
            WHERE  transtatus NOT IN ( 3, 7, 5 )";

    $stmt = db2_prepare($conn, $sql);

    if ($stmt) {
        $result = db2_execute($stmt);
        if ($result) {
            while ($row = db2_fetch_array($stmt)) {
                $admin[] = array(
                    'trnum' => $row[0],
                    'trtyp' => $row[1],
                    'trbatch' => $row[2],
                    'trdate' => $row[3],
                    'usrnam' => $row[4],
                    'trvnum' => $row[5],
                    'tracct' => $row[6],
                    'tramt' => $row[7],
                    'trvsts' => $row[8],
                    'numdoc' => $row[9]
                );
            }
        } else {
            error_log(db2_stmt_errormsg($stmt));
        }
    } else {
        error_log(db2_stmt_errormsg($stmt));
    }
} else {
    error_log(db2_conn_errormsg());
}

multiDim($admin);
$admin['data'] = $admin;
echo json_encode($admin);

【问题讨论】:

  • function () use ($container) { 更适合。
  • 嗯,在 php 和 javascript 之间进行通信时,最好的选择是使用 JSON 字符串。 function respond($result){ header('Content-type:application/json;charset=utf-8');退出(json_encode($result)); }
  • @LawrenceCherone 我是否将整个 php 文件包装在 function () use ($container) { 中?

标签: php dependency-injection slim pimple


【解决方案1】:

您可以通过两种方式访问​​db-object,首先是“数组”样式(就像您定义的那样)

$conn = $container['db'];

或通过get-方法

$conn = $container->get('db');

尽管如此,您应该在 Slim 中添加一个路由来执行此操作,而不是为此添加额外的 PHP 文件。这不是 Slim 的用例。

【讨论】:

  • 你能解释一下“尽管如此你应该在 Slim 中添加一条路由来做到这一点”
  • @moe 你可以添加一个类似here定义的路由,最后你可以使用$response->withJson($admin); 然后它应该和php文件一样工作。
  • 所以我的控制器和路由中会有一个响应?
  • @moe 控制器是路由的类版本,你只需要一个,you can have a look at this, for how I structur my controllers
  • 对,这正是我现在设置路由器/控制器的方式。让我退后一步。我只使用 Slim 几个星期。我正在尝试在我的视图中使用数据表,所以我需要进行 ajax 调用。这样做的最佳方式/结构是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 2016-08-19
  • 1970-01-01
  • 2023-01-25
相关资源
最近更新 更多