簡體   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