试图在Slim 3中使用数据表什么是使Ajax调用的最佳方式/结构

问题描述:

我想在Slim 3的视图中使用数据表。对我来说,使用数据表最简单的方法是使ajax调用,因为我不知道如何将json对象从控制器传递给数据表。我不确定在哪里放置我的ajax调用。我应该在App文件夹中创建另一个文件夹并将其命名为ajax?还是我讨论这些数据表都是错误的?试图在Slim 3中使用数据表什么是使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); 

此外,右击TNOW我得到这个错误<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'); 
+0

你可以添加代码,你现在怎么做? – jmattheis

+0

我现在没有成功地做到这一点,并且我所做的每一次尝试都已经将代码擦除并试图重新开始。 – moe

+0

只是表明,那么我可以理解你想要存档的东西,我现在不是100%确定的。 – jmattheis

首先对错误信息你:你需要包括纤细的部分启动在其中定义容器和$container['db']否则无法找到。

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

您应该添加一个路由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'); 

然后你可以参考你的树枝文件中这条路线

$(document).ready(function() { 
    $.ajax({ 
     url: "{{ path_for('myAjaxRequest') }}", 
     type: "GET", 
     dataType: 'json', 
    }).done(function (result) { 
     console.log(result); 
    }).fail(function (jqXHR, textStatus, error) { 
     console.log("getArchivedPo: " + error); 
    }); 
}); 
+0

我得到这个错误''''message“:”Callable AdminDashboardController :: class does not exist“,'''我会粘贴我的路线 – moe

+0

@moe编辑它。 – jmattheis

+0

你是上帝送来的!谢谢你的帮助,你不知道我多么感激! – moe