繁体   English   中英

无法自动装配“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 方法而不是 post 提交值,则可以使用$request->query代替$request->request

也可以看看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM