Как я могу разрешить FormBuilder внутри службы (Symfony4)? - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь создать форму в моем сервисе:

namespace App\Service;


class FormGenerator
{

public function createForm($slug,$request)
  {

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

    ....

Но я получаю сообщение об ошибке:

Попытка вызвать неопределенный метод с именем "createFormBuilder" из класс "Приложение \ Сервис \ FormGenerator".

1 Ответ

4 голосов
/ 05 марта 2019

Экземпляр построителя форм присутствует в 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')
   }
} 

Затем вам придется разрешить этот класс (FormGenerator) с помощью DI в вашей логике выборажелательно путем намека на тип в конструкторе абонента этого класса обслуживания.Надеюсь, что это имеет немного больше смысла

...