簡體   English   中英

如何在服務 (Symfony4) 中解析 FormBuilder?

[英]How can I resolve FormBuilder inside a service (Symfony4)?

我嘗試在我的服務中創建一個表單:

namespace App\Service;


class FormGenerator
{

public function createForm($slug,$request)
  {

    $item = new $EntityName();
    $formBuilder = $this->createFormBuilder($item);

    ....

但我收到錯誤消息:

試圖調用 class“App\Service\FormGenerator”的名為“createFormBuilder”的未定義方法。

表單生成器實例存在於AbstractController (大多數控制器擴展它)。 所以這就是您可以使用$this->createFormBuilder() 但在本例中,您創建了一個單獨的服務,因此您需要自己解析表單構建器。

我不確定您將如何在 Symfony 中執行此操作,但根據文檔和此鏈接,您可以鍵入提示表單構建器類,並且您將在您的方法中獲取實例。 像下面這樣的東西

代碼已更新為通過構造函數注入導入 FormBuilderInterface

use Symfony\Component\Form\FormBuilderInterface;

class FormGenerator 
{
   private $builder;

   public function __construct(FormBuilderInterface $builder) {
      $this->builder = $builder;
   }

   public function createForm($slug,$request)
   {
     $this->builder
            ->add('name')
            ->add('speciesCount')
            ->add('funFact')
   }
} 

然后,您必須通過 DI 將此類 ( FormGenerator ) 解析為您選擇的邏輯,最好是通過在此服務類的訂閱者的構造函數中對其進行類型提示。 希望它更有意義

正如前面的回答中所解釋的,表單構建器實例存在於大多數控制器擴展的 AbstractController 中。

但是,如果您想在服務中使用此 FormBuilder(用例很少,但可以做到),我建議您使用 FormFactory 服務。

這是一個例子:

use Symfony\Component\Form\FormFactoryInterface;

class MyService
{
    protected $formFactory;

    public function __construct(FormFactoryInterface $formFactory) {
        $this->formFactory = $formFactory;
    }

    public function getMyForms(): array
    {
        return [
            'deleteForm' => $this->formFactory->create()
                            ->addAction(…)->setMethod('DELETE')
                            ->getForm(),
            
            'addForm' => $this->formFactory->create()
                            ->addAction(…)
                            ->getForm(),
            /* etc… */
        ];
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM