![](/img/trans.png)
[英]How can I use the queryBuilder with formBuilder in Symfony 4?
[英]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.