Внедрение Slim-фреймворка в API

Я довольно долго пытался, и я не совсем понимаю, как и почему все работает со slim. Без Slim все работает нормально, и я вроде знаю, как все работает (это небольшой проект, который я делаю для изучения ajax, объектно-ориентированного php и Slim, и никогда не делал этого, поэтому я ДЕЙСТВИТЕЛЬНО растерялся).

Сейчас у меня есть HTML с формой, которая отправляет данные в файл.php через ajax. Этот файл принимает данные, выполняет запрос, помещает результаты в строку.json, а затем HTML-файл печатает результаты как холст charts.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). Я знаю, что этот файл - полное крушение поезда, но я в значительной степени иду методом проб и ошибок, но я определенно не продвигаюсь вообще. Я не понимаю документацию, и другие посты здесь в stackru не совсем объясняют, как это работает:

<?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. Теперь я получаю "Неустранимая ошибка: вызов неопределенного метода Slim\Http\Response::getAttribute() в строке 11" Edit2: ЧТО-ТО РАБОТАЕТ!!!! Одна из моих главных проблем заключалась в том, что я полностью испортила функцию $app->post, который дал мне ошибки с $ запросом и тому подобное. Волшебство происходит в строках 9 и 10. Теперь он отправляет.json обратно и печатает диаграмму! Теперь я хочу узнать, как вызывать класс Select, не включая его.

1 ответ

Ваш класс Select не загружается автоматически, поэтому вы получаете эту ошибку. Вы видели эту рекомендацию с сайта Slim? https://www.slimframework.com/ "Самый простой способ начать работу со Slim - это создать проект с использованием Slim-Skeleton в качестве основы, выполнив команду bash:

$ php composer.phar create-project slim / slim-skeleton [my-app-name] ". Обычно я использовал это скелетное приложение для создания своих slim-приложений.

Другие вопросы по тегам