Можно ли иметь одну переменную stati c на сервере для всех соединений? - PullRequest
0 голосов
/ 09 февраля 2020

Я создаю пошаговую игру в китайские шашки. В теле я добавил функцию onload, которая отправляет на сервер ajax запрос на получение номера игрока для подключения. Но похоже, что ответ всегда возвращает одно и то же число. Я пытался использовать $GLOBALS, но не помог.

Как я хочу, чтобы это работало: когда я открываю новое окно с игрой, соединение получает следующий номер с простым +1. JS код находится на домашней странице html, используя Symfony.

Некоторые фрагменты кода:

<body onload="getPlayerNum()">

var playerNumber = 0;
function getPlayerNum(){
    $.ajax({
        url: "http://localhost:8000/ajaxPlayer",
        method: "POST",
        data: {"playerNumber": playerNumber},
        success: function(data) {
            console.log(data);
        }
    });
}


/**
 * @Route("/ajaxPlayer")
 */
public function ajaxPlayer(Request $request){
    if ($request->isXmlHttpRequest()){
        if (isset($GLOBALS["number"])){
            $playerNumber = $GLOBALS["number"] + 1;
            $GLOBALS["number"] = $playerNumber;
        } else {
            $playerNumber = 1;
            $GLOBALS["number"] = $playerNumber;
        }
        return new Response($playerNumber);
    }
}

1 Ответ

1 голос
/ 09 февраля 2020

Глобальные переменные (например, та, которую вы устанавливаете в $GLOBALS["number"]) являются «глобальными» только в скрипте PHP, который выполняется, когда ваш браузер запрашивает http://localhost:8000/ajaxPlayer. Они не будут автоматически запомнены PHP при следующем вызове скрипта.

Если вы используете переменную сеанса , например, $_SESSION["number"] = $playerNumber;, то она будет присутствовать в любой скрипт, который запрашивает ваш браузер во время сеанса просмотра (по умолчанию это означает, что вы не закроете браузер).

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

Наиболее распространенный способ сделать это - использовать базу данных. Если вы работаете со всем своим приложением в Symfony, то, вероятно, вы захотите начать с прочтения документации Doctrine.

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