Symfony: выборка с запросом пут в результатах маршрута в RuntimeException - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь вызвать сервисный метод нажатием кнопки со следующим кодом:

Веточка HTML:

<input type="button" value="Ready Up" onclick="ready('{{ path('ready', {'playerName' : name}) }}')">

Javascript:

function ready(path) {
    fetch(path, {method : 'put'})
        .then(function (response) {
            console.log(response);
        });
}

Контроллер Symfony:

/**
 * @Route("/api/player/ready", name="ready")
 * @return Response
 */
public function toggleReady($playerName) {
    $this->gameCacheService->readyUp($playerName);

    return new Response('test');
}

Нажатие на кнопку приводит к следующему исключению:

 Uncaught PHP Exception RuntimeException: "Controller "App\Controller\PlayerController::toggleReady()" requires that you provide a value for the "$playerName" argument. Either the argument is nullable and no null value has been provided, no default value has been provided or because there is a non optional argument after this one." 

Однако сгенерированный URL выглядит так, как будто он действительно предоставляет значение для $ playerName:

/api/player/ready?playerName=Testname

Что вызывает такое поведение?

Окончательный HTML-код, отображаемый в браузере:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
<body>
    <input type="button" value="Ready Up" onclick="ready('/api/player/ready?playerName=Testname')">
    <script>
        function ready(path) {
            fetch(path, {method : 'put'})
                .then(function (response) {
                    console.log(response);
                });
        }
    </script>
</body>
</html>

1 Ответ

0 голосов
/ 08 января 2019

Вы забыли включить параметр маршрута в аннотацию:

/**
 * @Route("/api/player/ready/{playerName}", name="ready")
 * @return Response
 */
public function toggleReady($playerName) {
    $this->gameCacheService->readyUp($playerName);

    return new Response('test');
}
...