尝试在Slim 3中使用数据表什么是进行ajax调用的最佳方式/结构

时间:2017-08-29 17:20:44

标签: datatables slim

我正在尝试在Slim 3中的视图中使用数据表。对我来说,使用数据表的最简单方法是进行ajax调用,因为我不知道如何将json对象从控制器传递给datatables。我不知道在哪里放我的ajax电话。我应该在我的App文件夹中创建另一个文件夹并将其命名为ajax吗?或者我对这个数据表的看法都错了吗?

这是我的控制器

<?php


namespace App\Controllers\Dashboards;

use App\Controllers\Controller;

class AdminDashboardController extends Controller
{
    public function listAction($request, $response)
    {
        return $this->view->render($response,'dashboards/admin.html.twig');
    }
}

这是我的观点

{% extends 'base.html.twig' %}

{% block body %}
    <h1>this will be the admin dash</h1>

{% endblock %}

{% block javascripts %}
    {{parent()}}
    <script>
        $(document).ready(function() {
            $.ajax({
                url: "../src/App/ajax/getAll.php",
                type: "GET",
                dataType: 'json',
            }).done(function (result) {
                console.log(result);
            }).fail(function (jqXHR, textStatus, error) {
                console.log("getArchivedPo: " + error);
            });
        });
        </script>
{% endblock %}

这是我的ajax

<?php

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

$admin = array();

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());
}

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

此外,我正在收到此错误<b>Notice</b>: Undefined variable: container in <b>/www/slim/htdocs/bd/src/App/ajax/getAll.php</b> on line <b>3</b><br /> {"data":[]}

那么我应该把我的ajax放在其他地方吗?

我的路线

<?php

$app->get('/', 'HomeController:indexAction')->setName('home');
$app->get('/admindash', 'AdminDashboardController:listAction')->setName('admindash');
$app->get('/ajaxrequest', [AdminDashboardController::class, 'ajax'])->setName('myAjaxRequest');
$app->get('/poentry', 'PoController:entryAction')->setName('poentry');
$app->get('/poedit', 'PoController:editAction')->setName('poedit');
$app->get('/poarchive', 'PoController:archiveAction')->setName('poarchive');
$app->get('/voucherwithpo', 'VoucherController:entryWithPoAction')->setName('voucherwithpo');
$app->get('/voucherwithoutpo', 'VoucherController:entryWithOutPoAction')->setName('voucherwithoutpo');
$app->get('/edituser', 'UserController:editAction')->setName('edituser');
$app->get('/adduser', 'UserController:addAction')->setName('adduser');
$app->get('/poarchivedash', 'ArchivePoDashboardController:listAction')->setName('poarchivedash');
$app->get('/voucherarchivedash', 'ArchiveVoucherDashboardController:listAction')->setName('voucherarchivedash');
$app->get('/notedash', 'NoteDashboardController:listAction')->setName('notedash');

1 个答案:

答案 0 :(得分:1)

首先要了解您收到的错误消息:您需要在定义容器的位置包含细长启动的部分,而在{(1}}中包含无法找到的部分。

但现在你没有额外的php文件的解决方案:

你应该在$container['db']中添加你可以做的ajax请求的路由

AdminDashboardController

然后添加路线:

class AdminDashboardController {
    // listAction function

    function ajax($request, $response) {
        // copy from your ajax file 
        return $response->withJson($admin);
    }
}

然后你可以在你的树枝文件中引用那条路线

$app->get('/ajaxrequest', 'AdminDashboardController:ajax')->setName('myAjaxRequest');