Как устранить ошибку Symfony 3 Ожидаемый аргумент типа string, заданный yourBundle / Form / xformType

Реализуете ли вы новую версию Symfony в своем старом проекте Symfony 2? Это совершенно очевидно почти во всех случаях. Мы хотим пользоваться новейшими функциями Symfony, когда это возможно, однако не всегда так просто, как изменить ваш composer.json, запустить обновление composer и подождать, пока все работает как часы!

Обновление займет больше времени, и вам необходимо внимательно прочитать новую документацию по Symfony 3 (читайте больше о формах здесь). А пока давайте решим эту маленькую проблему:

Ваш контроллер

Когда вы сталкиваетесь с этой проблемой, ваш контроллер, вероятно, будет выглядеть так:

createForm(new MyClass(), $entity, array(
'action' => $this->generateUrl('myclass_create'),
'method' => 'POST',
));
return $form;
}
// and your edit with something like :
private function createEditForm(Projects $entity)
{
$form = $this->createForm(new MyClass(), $entity, array(
'action' => $this->generateUrl('projects_update', array('id' => $entity->getId())),
'method' => 'PUT',
));
return $form;
}

Ошибка довольно проста: вы не можете напрямую инициализировать метод createForm с первым параметром в качестве нового экземпляра MyClass, вместо этого мы будем вызывать свойство статического класса проблемного класса следующим образом:

createForm(MyClassType::class, $entity, array(
'action' => $this->generateUrl('myclass_create'),
'method' => 'POST',
));
return $form;
}
private function createEditForm(MyClass $entity)
{
// Note the change of the first parameter of createForm
$form = $this->createForm(MyClassType::class, $entity, array(
'action' => $this->generateUrl('projects_update', array('id' => $entity->getId())),
'method' => 'PUT',
));
return $form;
}

Ваш formType

Ваш старый formType может выглядеть так:

namespace yourBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class ProjectsType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name','text',array('attr' => array('class' => 'form-control')))
->add('number','number',array('attr' => array('class' => 'form-control')))
->add('date','date', array('widget'=>'single_text','format' => 'yyyy-MM-dd HH:mm','attr' => array('class' => 'form-control')))
->add('description','textarea',array('attr' => array('class' => 'form-control')))
;
}
/// other functions
}

Как видно на контроллере, тип объявления изменился в Symfony 3, чтобы решить проблему, мы изменим второй параметр ->add недвижимость в застройщике для:

namespace yourBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
//Note that you need to include the typeClass of every type that you include
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
class ProjectsType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name',TextType::class,array('attr' => array('class' => 'form-control')))
->add('number',NumberType::class,array('attr' => array('class' => 'form-control')))
->add('date',DateType::class, array('widget'=>'single_text','format' => 'yyyy-MM-dd HH:mm','attr' => array('class' => 'form-control')))
->add('description',TextareaType::class,array('attr' => array('class' => 'form-control')))
;
}
/// other functions
}

И этого было бы достаточно, чтобы решить эту неприятную и небольшую ошибку, поскольку имена типов Symfony 3 были удалены. Вместо того, чтобы ссылаться на типы по имени, вы должны вместо этого ссылаться на них по их полному имени класса (FQCN).

Повеселись !

Ссылка на основную публикацию
Adblock
detector