无法自动装配参数 $of "App\Controller\HomeController":它引用 class "Symfony\Component\Form\SubmitButton" 但不存在此类服务

Cannot autowire argument $of "App\Controller\HomeController": it references class "Symfony\Component\Form\SubmitButton" but no such service exists

这里是 symfony 菜鸟。

我不确定这个自动装配错误是关于什么的。

我正在尝试检查按钮是否被点击(也许有更好的方法)

像这样(先看if)

 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);
    }

这是我的全部 class,我在这里引用的内容有误吗? 或者是否有其他方法来检查是否已提交表单(我没有数据库)

  /**
 * @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);
    }
}

问题出在这里:

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()]);
}

可以理解,如果您想做的只是检查按钮是否被单击,并且您不想围绕它构建整个表单,那么这有点过分了。为此,您只需从请求中访问提交的数据,而无需求助于任何形式 class whatsover:

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

    // ...
}

如果您使用 GET 方法提交值,则可以 $request->query 而不是 $request->request,而不是 post。

另请参阅: