Я пытался отправить форму, которая сохраняет объект. Когда я пытаюсь сделать это, это сообщение об ошибке показывает:
Я использую сервис для создания формы и использую контроллер для вызова данных.
я добавить {{ form_rest(form) }}
а также {{ form_row(form._token) }}
<?php
namespace AppBundle\Controller\Condidate;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Entity\Skill;
use AppBundle\Controller\AbstractController;
use AppBundle\Form\SkillType;
/**
*Class SkillController.
*/
class SkillController extends AbstractController
{
/**
*function handler.
*/
protected function getHandler(){
return $this->get('recurit.handler.skill');
}
public function getSkillAction(Request $request){
return $this->render('skills/listkill.html.twig');
}
/**
*function addSkill
* @param Request $request
* @return \Symfony\Component\Form\Form The form
*/
public function addSkillAction(Request $request) {
$skill =$this->getHandler()->post($request->request->all());
if ($skill instanceof Skill) {
//return $this->redirectToRoute('list_skills');
}
return $this->render('skills/newskill.html.twig', array(
'form' => $skill->createView(),));
}}
<?php
namespace AppBundle\Handler;
use AppBundle\Handler\HandlerInterface;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Entity\Skill;
use Doctrine\ORM\EntityManager;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\Form\formFactory;
/**
* SkillHandler.
*/
class SkillHandler implements HandlerInterface {
/**
*
* @var EntityManager
*/
protected $em;
/**
*
* @var formFactory
*/
private $formFactory;/**
*function construct.
*/
public function __construct(EntityManager $entityManager, formFactory $formFactory)
{
$this->em = $entityManager;
$this->formFactory = $formFactory;
}
/**
*function post
*/
public function post(array $parameters, array $options = []) {
$form = $this->formFactory->create(\AppBundle\Form\SkillType::class, new Skill(), $options);
$form->submit($parameters);
var_dump($form->getErrors());
if ($form->isValid()) {
var_dump('1');
$skill = $form->getData();
$this->persistAndFlush($skill);
return $skill;
}
return $form;
}
/**
*function persisteAndFlush
*/
protected function persistAndFlush($object) {
$this->em->persist($object);
$this->em->flush();
}/**
*function get
*/
public function get($id){
throw new \DomainException('Method SkillHandler::get not implemented');
}
/**
*function all
*/
public function all($limit = 10, $offset = 0){
throw new \DomainException('Method SkillHandler::all not implemented');
}/**
*function put
*/
public function put($resource, array $parameters, array $options){
throw new \DomainException('Method SkillHandler::put not implemented');
}
/**
*function patch
*/
public function patch($resource, array $parameters, array $options){
throw new \DomainException('Method SkillHandler::patch not implemented');
}
/**
*function delete
*/
public function delete($resource){
throw new \DomainException('Method SkillHandler::delete not implemented');
}
}
SkillType.php:
<?php
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class SkillType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('nomComp',TextType::class);
$builder->add('submit',SubmitType::class);
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Skill',
'csrf_field_name' => '_token',
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'appbundle_skill';
}}
{% extends 'base.html.twig' %}
{% block body %}
{{ form_start(form) }}
{#{{ form_label(form.nomComp) }}
{{ form_widget(form.nomComp) }}
{{ form_errors(form.nomComp) }}
#}
{{ form_row(form.nomComp) }}
{{ form_row(form.submit) }}
{{ form_row(form._token) }}{#<input type="submit" value="Create" name="form[submit]"/>#}
{{ form_rest(form) }}
{{ form_end(form) }}
{%endblock%}
Как я могу устранить эту ошибку?
Проверьте исходный код сгенерированной HTML-страницы. Я думаю, у вас есть дополнительный <form></form>
тег где-то.
Попробуйте убрать строку {{ form_widget(form.nomComp) }}
,
Вы будете визуализировать это поле формы с последним {{ form_row(form.nomComp) }}
,
Попробуй это:
{% set formId = form.vars.id~'Form' %}
{{ form_start(form) }}
{{ form_errors(form) }}
{{ form_widget(form.nomComp) }}
{{ form_widget(form.submit) }}
{{ form_end(form) }}
{{ form_rest(form) }}