【问题标题】:Implementing Slim framework to API将 Slim 框架实现到 API
【发布时间】:2017-04-24 18:43:33
【问题描述】:

我已经尝试了很长一段时间,但我不太明白所有东西如何以及为什么适用于 slim。没有 Slim 一切正常,我有点知道一切是如何工作的(这是我正在做的一个小项目,用于学习 ajax、面向对象的 php 和 Slim,但从未这样做过,所以我真的丢失)。

我现在拥有的是一个带有表单的 html,它通过 ajax 将数据发送到一个 .php 文件。该文件获取数据,运行查询,将结果放入 .json 字符串中,然后 html 将结果打印为 chart.js 画布。

这是我的 php 类(Select.php):

<?php require_once 'Connection.php';

$id     = $_POST['id'];
$from   = $_POST['from'];
$to     = $_POST['to'];

$date = new Select($dbh, $id, $from, $to);
return $dates->select();

class Select {
    private $dbh;
    public function __construct($dbh, $id, $from, $to) {
        $this->dbh = $dbh;
        $this->id = $id;
        $this->from = $from;
        $this->to = $to;
    }
    public function select() {
        $id = $this->id;
        $from = $this->from;
        $to = $this->to;
        $query = ***Ignoring it because it's quite long***

        $results = [];
        while ($arr = $query->fetch(PDO::FETCH_ASSOC)) {
            $results[] = $arr;
        }
        echo json_encode($results);
    }
}

我的 ajax 脚本(generateChart.js):

$.ajax({
    type: 'post',
    url: 'classes/Select.php',
    data: $('form').serialize(),
    success: function (data) {
        var results = JSON.parse(data);
        var chartjsTemp = [];
        var chartjsDate = [];
        for (var i = 0; i < results.length; i++) {
            chartjsTemp.push(results[i].probeTemp);
            chartjsDate.push(results[i].dateProbe);
        }
        var ctx = document.getElementById('myChart').getContext('2d');
        var button = $("#submitButton");
        submitButton.addEventListener("click", function(){
            myChart.destroy();
        });
        var myChart = new Chart(ctx, {
            type: 'line',
            data: {
                labels: chartjsDate,
                datasets: [{
                    label: 'temp',
                    data: chartjsTemp,
                    backgroundColor: "rgba(240,240,240,0.5)"
                }]
            }
        });
    }
});

这就是我尝试实现“Select.php”(称为 slimSelect.php)的地方。我知道这个文件完全是一场灾难,但我几乎是在反复试验,但我绝对没有进步。我不明白 the documentationother posts 在 stackoverflow 中并没有完全解释它是如何工作的:

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require '../vendor/autoload.php';
require 'Autoloader.php';

$app = new \Slim\App;
$app->post('/', function(Request $request) use ($app) {
    $allPostPutVars = $request->getParsedBody();
    $id = $allPostPutVars['id'];
    $from = $allPostPutVars['from'];
    $to = $allPostPutVars['to'];
    include 'Select.php';
});
$app->run();

现在,它给了我Fatal error: Class 'Select' not found,尽管它确实存在。如何让苗条和我的班级一起工作只是让我头疼。如果有人能解释我如何让它发挥作用,或者至少为我指出正确的方向,我将不胜感激。

编辑:修改 slimSelect.php。我现在收到“致命错误:在第 11 行调用未定义的方法 Slim\Http\Response::getAttribute()” 编辑2:有什么工作!!!!我的主要问题之一是我完全搞砸了$app-&gt;post 中的函数,这给了我 $request 等错误。魔术发生在第 9 行和第 10 行。它现在将 .json 发送回并打印图表!现在我想了解如何在不包含它的情况下调用 Select 类。

【问题讨论】:

  • 您可能需要包含您的 Select.php 才能在 slimSelect.php 中使用该类
  • @AhmedGinani 我不应该自动加载器处理它$date = new Select()吗?
  • 据我所知不应该
  • @AhmedGinani 好的。我现在将它包含在 slimSelect.php 中,并将 function() 更改为 function(Request $id, $from, $to)。还添加了此尝试:$id = $id-&gt;getAttribute('id');(与 from 和 to 相同)。我现在在第二个getAttribute 上得到“调用未定义的方法 Slim\Http\Response::getAttribute()”。这是为什么呢?
  • 做一件事,将您的 Select.php 放在模型文件夹中,然后尝试获取 $date = new \models\Select();但是你的课应该扩展例如类'Select extends \Slim\Middleware{'

标签: php jquery slim slim-3


【解决方案1】:

您的 Select 类未自动加载,这就是您收到此错误的原因。你有没有从 slim 的网站上看到这个建议。 https://www.slimframework.com/ "开始使用 Slim 最简单的方法是通过运行以下 bash 命令创建一个使用 Slim-Skeleton 作为基础的项目:

$ php composer.phar create-project slim/slim-skeleton [my-app-name] "。我通常使用这个骨架应用程序来构建我的超薄应用程序。

【讨论】:

  • 是的。我做了“你好,{name}”的例子来了解它是如何工作的,但就这么简单,我看不到将它应用于我的项目的方法:/
猜你喜欢
  • 1970-01-01
  • 2017-05-23
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 2013-04-03
  • 2020-03-20
相关资源
最近更新 更多