В настоящее время я ввел контейнер в свою форму (сделав его службой):
ApFloorType.php
namespace Techforge\ApartmentBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\DependencyInjection\ContainerInterface;
class ApFloorType extends AbstractType
{
//in the controller, they are differently initialised
private $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function buildForm(FormBuilder $builder, array $options)
{
$bath_choices = $this->container->getParameter('bath_choices');
$bed_choices = $this->container->getParameter('bed_choices');
$builder
->add('baths', 'choice', array('choices' => $bath_choices))
->add('beds', 'choice', array('choices' => $bed_choices))
->add('name')
->add('file')
->add('plan_description', 'textarea')
->add('min_max_feet', 'text')
->add('deposit', 'text')
->add('application_fee')
->add('rental_deposit')
->add('lease_terms', 'textarea')
->add('threshhold_value')
->add('auto_accept')
->add('pending')
->add('apartment', 'hidden', array('property_path' => false))
->add('pre_post_update', 'hidden')
->add('photos', 'collection', array('type' => new ApFloorImageType()))
;
}
public function getName()
{
return 'techforge_apartmentbundle_apfloortype';
}
}
Проблема заключается в том, что CRUD-система ApFloor перестала работать после этого, потому чтов моем контроллере я не могу просто написать
$form = $this->createForm(new ApFloorType(), $floor);
Это приведет к следующей ошибке:
Catchable Fatal Error: Аргумент 1 передан Techforge \ ApartmentBundle \ Form \ApFloorType :: __ construct () должен реализовывать интерфейс Symfony \ Component \ DependencyInjection \ ContainerInterface, ни один из которых не задан, вызывается в /home/stormlifter/webapps/pmr/src/Techforge/ApartmentBundle/Controller/Manager/ApFloorController.ph и определен в on-line строке 38/home/stormlifter/webapps/pmr/src/Techforge/ApartmentBundle/Form/ApFloorType.php строка 16
Я решил эту проблему, вызвав такой метод создания формы;
$form = $this->createForm($this->get('apfloortype'), $floor);
Итак, мой вопрос: есть ли обходной путь, чтобы мне не приходилось менять каждый вызов createForm () в моем контроллере CRUD после того, как он стал сервисом?