Невозможно автоматически передать аргумент $ для «App \ Controller \ HomeController»: он ссылается на класс «Symfony \ Component \ Form \ SubmitButton», но такой службы не существует - PullRequest
0 голосов
/ 22 февраля 2020

symfony noob здесь.

Я не уверен, о чем эта ошибка автопроводки.

Я пытаюсь проверить, нажата ли кнопка (возможно, есть лучший способ сделать это)

Как и так (см. сначала, если)

 if ($button->get('submit')) {
        $parameters = [];

        $clientId = $request->get('client_id');
        $clientSecret = $request->get('client_secret');
        $playlistId = $request->get('playlist_id');

        if ($clientId && $clientSecret && $playlistId) {
            $parameters['client_id'] = $playlistId;
            $parameters['client_secret'] = $clientSecret;
            $parameters['playlist_id'] = $playlistId;
        }
        Validator::validateArrayKeys($parameters);
    }

Это весь мой класс, я ссылаюсь здесь что-то не так? Или есть другой способ проверить, была ли отправлена ​​форма (у меня нет базы данных)

  /**
 * @Route("/", name="app_index")
 */
public function index(Request $request, SubmitButton $button)
{

    $this->getParameters($request, $button);

    return $this->render('home/index.html.twig', [
        'controller_name' => 'HomeController',
    ]);
}


public function getParameters(Request $request, SubmitButton $button)
{
    $submitButton = $button->get('submit');

    dd($submitButton);

    if ($button->get('submit')) {
        $parameters = [];

        $clientId = $request->get('client_id');
        $clientSecret = $request->get('client_secret');
        $playlistId = $request->get('playlist_id');

        if ($clientId && $clientSecret && $playlistId) {
            $parameters['client_id'] = $playlistId;
            $parameters['client_secret'] = $clientSecret;
            $parameters['playlist_id'] = $playlistId;
        }
        Validator::validateArrayKeys($parameters);
    }
}

1 Ответ

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

Проблема здесь:

public function index(Request $request, SubmitButton $button)

Symfony не может сделать вывод, что такое $button. Если у вас есть соответствующая форма, вам нужно создать экземпляр этой формы, обработать запрос, а затем проверить, была ли нажата кнопка, примерно так:

public function index(Request $request)
{
    $form = $this->createForm(MyFormType::class);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        if ($form->get('submit')->isClicked()) {
            // ...
        } else {
            // ...
        }
    }

    return $this->render('my_template.html.twig', ['form' => $form->createView()]);
}

Понятно, что это немного, если все, что вы хотите Для этого нужно проверить, была ли нажата кнопка, и вы не хотите создавать вокруг нее целую форму. Для этого вы можете просто получить доступ к отправленным данным из запроса, не прибегая к какому-либо классу формы:

public function index(Request $request)
{
    $isClicked = $request->request->get('submit');

    // ...
}

Вместо $request->request это может быть $request->query, если вы отправили значение с помощью GET- метод, а не сообщение.

См. также:

...