PHP автозагрузка не может найти файлы классов после вызова AJAX - PullRequest
0 голосов
/ 28 сентября 2019

Я создаю очень простое приложение для магазина, используя PHP и немного JQuery.При первой загрузке приложение загружается нормально, но если GET запрашивает вызов того же скрипта, оно выдает мне ошибку:

Warning: require(app\controllers\Wallet.php): failed to open stream: No such file or directory in C:\xampp\htdocs\abc\app\core\autoload.php on line 5

Вот мой файл index.php (ссылки Bootstrap и Jquery опущены):

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>MyShop</title>
  </head>
  <body>
    <div id="app">
    <?php 
        require_once 'app/core/App.php';
    ?>
    </div>
  </body>
</html>

Вот мой app/core/App.php:

<?php

namespace app\controllers;

require_once 'autoload.php';

//Instantiate
$wallet = new Wallet();
$header = new Header();
$products = new Products();
$products_list = $products->getProducts();
$cart = new Cart($products_list);
//Do logic
$cart->addToCart(2);

if(isset($_GET['addtocart']))
{
    $added_id = $_GET['addtocart'];
    $cart->addToCart($added_id);
}
if(isset($_GET['removefromcart']))
{
    $added_id = $_GET['removefromcart'];
    $cart->removeFromCart($added_id);
}
if(isset($_GET['checkout']))
{
    $cart->checkout();
}

//
//Show everything
$header->showHeader($wallet);
$products->showProducts();
$cart->showCart();

Автозагрузка в autoload.php очень проста

<?php

spl_autoload_register(function($className)
{  
   require $className.'.php';
});

А вот пример сценария jquery, привязанного кAdd to cart кнопка:

$(function() {
    $('#app').on("click","#addtocart", function (e) {
        e.preventDefault();
        productId = $(e.target).data("product-id")
        $.ajax({
            type: 'get',
            url: './app/core/App.php',
            data: {
                'addtocart': productId,
            },
            success: results => {
                $('#app').html(results);
            },
            error: () => {
                alert('Load error');
            }
        });
        console.log(productId);
    });    
})

Похоже, ничего не меняется, но код ломается.

1 Ответ

0 голосов
/ 29 сентября 2019

Пришлось провести рефакторинг autoload.php добавив абсолютный путь, чтобы он заработал:

<?php

spl_autoload_register(function($className)
{  
    $file = $_SERVER['DOCUMENT_ROOT'].PROJECT_SUBFOLDER.$className.'.php';
    if(file_exists($file))
    {
        require_once $file;
    }
    else {
        echo 'File:'.$file.' not found';
    }
});

?>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...