Q:

Symfony: createForm(), Type __construct($arg). Передать аргумент в конструктор

Можно ли передать аргумент в конструктор класса Type для создания формы?
Для примера:
TestType
public $arg;

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

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'arg'=> null,
    ));
}

TestController
$form = $this->createForm(TestType::class, $test, ['arg'=>'test']);

Или надо убрать конструктор и делать все в методе buildForm()?
//TestType.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $this->arg = $options['arg'];
    ...
}

A:

Можно. Для этого достаточно зарегистрировать TestType в сервис контейнере, внедрить нужные зависимости (в нашем случае аргумент конструктора) и присвоить полученному сервису тэг form.type.
# src/AppBundle/Resources/config/services.yml
services:
    app.form.type.test:
        class: AppBundle\Form\TestType
        arguments: ['Я аргумент конструктора']
        tags:
            - { name: form.type }

При этом код контроллера не требует изменений:
$form = $this->createForm(TaskType::class, $test);

Экземпляры класса TestType будут созданы с передачей описанных в сервисе аргументов конструктора (в данном случае это строка 'Я аргумент конструктора'.
class TestType extends AbstractType
{   
    public function __construct($argument)
    {
        print_r($argument);
    }
}

Важно: Сервис должен быть публичным.
Аргументами сервиса могут быть также параметры контейнера ('%my_parameter%') или другие сервисы ('@my_service').
Примеры в документации
Как это работает:
Достаточно упрощенно схему работы можно представить следующим образом:

На этапе компиляции контейнера фреймворк соберет все сервисы отмеченные тегом form.type и сформирует из них карту соответствия класс -> сервис:
// [TestType::class => 'app.form.type.test']
$types[$serviceDefinition->getClass()] = $serviceId;

Когда потребуется создать экземпляр класса TestType::class, описанная выше карта будет использована для ленивого получения экземпляра формы из сервис контейнера со всеми внедренными зависимостями. Цепочка делегируемых вызовов при этом выглядит следующим образом: 
FormBuilder -> FormRegistry -> FormExtension[]

