我尝试在我的服务中创建一个表单:
namespace App\Service;
class FormGenerator
{
public function createForm($slug,$request)
{
$item = new $EntityName();
$formBuilder = $this->createFormBuilder($item);
....
但我收到错误消息:
尝试调用类“App \ Service \ FormGenerator”的名为“createFormBuilder”的未定义方法。
表单构建器实例存在于AbstractController
中(大多数控制器扩展它)。这就是为什么你能够使用$this->createFormBuilder()
。但在这种情况下,您已创建了一个单独的服务,因此您需要自己解析表单构建器。
我不确定如何在Symfony中执行此操作,但根据文档和this link,您可以键入表单构建器类,您将在方法中获取实例。类似下面的东西
代码已更新,通过构造函数注入导入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
)解析为您选择的逻辑,最好通过在此服务类的订阅者的构造函数中对其进行类型提示。希望它更有意义