我尝试从一个方形提交数据,将它们发送到post var,而不是通过handlequest()方法来缓存。我试图显示潜在的验证器错误,但没有任何错误。Rebug相同:路由器和方形错误捕获。
addarticleController
class AddArticleController extends AbstractController
{
/**
* @Route("/ajouter" , name="_add")
* @param Environment $environment
* @return Response
* @throws Twig_Error_Loader
* @throws Twig_Error_Runtime
* @throws Twig_Error_Syntax
*/
public function index()
{
return $this->render('add_article/AddArticle.html.twig', [
'controller_name' => 'AddArticleController',
]);
}
/**
* @param Request $request
* @return Response
*/
public function addCompanie(ValidatorInterface $validator,Request $request){
//On submit, data are in POST var, but not submited
$companie = new Companies();
$form = $this->createForm(AddCompanieType::class, $companie);
$form->handleRequest($request);
//displaying validator errors
$errors = $validator->validate($companie);
if (count($errors) > 0) {
/*
* Uses a __toString method on the $errors variable which is a
* ConstraintViolationList object. This gives us a nice string
* for debugging.
*/
$errorsString = (string) $errors;
return new Response($errorsString);
}
if($form->isSubmitted() && $form->isValid()){
$companie = $form->getData();
echo 'ok';
}
return $this->render('form/AddCompanie.html.twig', array(
'formCompanie' => $form->createView(),
));
}
}
addcompanietype
class AddCompanieType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('companie_name',
TextType::class, [
'label'=>'Nom de l'Entreprise',
'attr'=>[
'pattern' => '[A-Za-z&]{1,}',
'class'=>'form-control'
]
])
->add('Adress',
TextType::class, [
'label'=>'Adresse',
'attr'=>[
'pattern' => '^d{1,2}([- ]?[A-Za-z]){1,}([ ]?)$',
'class'=>'form-control'
]
])
->add('postal_code',
TextType::class, [
'label'=>'Code postal'
, 'attr'=>[
'pattern' => 'd{5}',
'class'=>'form-control'
]
])
->add('City',
TextType::class, [
'label'=>'Ville',
'attr'=>[
'pattern' => '^[A-Z]([- ]?[A-Za-z]){1,}',
'class'=>'form-control'
]
])
->add('phone_number',
TelType::class, [
'label'=>'Téléphone Fixe',
'required' => false,
'attr'=>[
'pattern' => '^0[1-68]([-. ]?d{2}){4}$',
'class'=>'form-control'
]
])
->add('turnover',
IntegerType::class, [
'label'=>'Chiffre d'Affaire',
'required' => false,
'attr'=>[
'pattern' => '',
'class'=>'form-control'
]
])
->add('social_reason',
TextType::class, [
'label'=>'Raison Social',
'attr'=>[
'pattern' => '[A-Za-z&]{1,}',
'class'=>'form-control'
]
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Companies::class,
]);
}
}
公司
/**
* @ORMEntity(repositoryClass="AppRepositoryCompaniesRepository")
*/
class Companies
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMColumn(type="string", length=255)
* @ValidatorRegex("/[A-Za-z&]{1,}/")
*/
private $companie_name;
/**
* @ORMColumn(type="integer", nullable=true)
*/
private $nb_projects;
/**
* @ORMColumn(type="string", length=255)
* @ValidatorRegex("/^[A-Z]([- ]?[A-Za-z]){1,}/")
*/
private $City;
/**
* @ORMColumn(type="string", length=255)
* @ValidatorRegex("/^d{1,2}[A-Za-z]/")
*/
private $Adress;
/**
* @ORMColumn(type="string", length=5)
* @ValidatorLength(
* min = 5,
* max = 5,
* minMessage = "Un numéro de téléphone doit être composé de {{ limit }} chiffres : trop court",
* maxMessage = "Un numéro de téléphone doit être composé de {{ limit }} chiffres : trop long"
* )
* @ValidatorRegex("/d{5}/")
*/
private $postal_code;
/**
* @ORMColumn(type="string", length=10, nullable=true)
* @ValidatorLength(
* min = 10,
* max = 10,
* minMessage = "Un numéro de téléphone doit être composé de {{ limit }} chiffres : trop court",
* maxMessage = "Un numéro de téléphone doit être composé de {{ limit }} chiffres : trop long"
* )
* @ValidatorRegex("/^0[1-68]([-. ]?d{2}){4}$/")
*/
private $phone_number;
/**
* @ORMColumn(type="integer", nullable=true)*
* @ValidatorType(
* "integer",
* message="La valeur {{ value }} n'est pas un nombre)"
* )
*/
private $turnover;
/**
* @ORMColumn(type="string", length=255)
* @ValidatorType("string")
* @ValidatorRegex("/[A-Za-z&]{1,}/")
*/
private $social_reason;
/**
* @ORMColumn(type="integer", nullable=true)
*/
private $effective;
/**
* @ORMManyToMany(targetEntity="Project", mappedBy="companies")²
*/
private $projects;
public function __construct()
{
$this->projects = new ArrayCollection();
}
public function __toString()
{
return '';
}
public function getId(): ?int
{
return $this->id;
}
public function getCompanieName(): ?string
{
return $this->companie_name;
}
public function setCompanieName(string $companie_name): self
{
$this->companie_name = $companie_name;
return $this;
}
public function getNbProjects(): ?int
{
return $this->nb_projects;
}
public function setNbProjects(?int $nb_projects): self
{
$this->nb_projects = $nb_projects;
return $this;
}
public function getCity(): ?string
{
return $this->City;
}
public function setCity(string $City): self
{
$this->City = $City;
return $this;
}
public function getAdress(): ?string
{
return $this->Adress;
}
public function setAdress(string $Adress): self
{
$this->Adress = $Adress;
return $this;
}
public function getPostalCode(): ?int
{
return $this->postal_code;
}
public function setPostalCode(int $postal_code): self
{
$this->postal_code = $postal_code;
return $this;
}
public function getPhoneNumber(): ?int
{
return $this->phone_number;
}
public function setPhoneNumber(?int $phone_number): self
{
$this->phone_number = $phone_number;
return $this;
}
public function getTurnover(): ?int
{
return $this->turnover;
}
public function setTurnover(?int $turnover): self
{
$this->turnover = $turnover;
return $this;
}
public function getSocialReason(): ?string
{
return $this->social_reason;
}
public function setSocialReason(string $social_reason): self
{
$this->social_reason = $social_reason;
return $this;
}
public function getEffective(): ?int
{
return $this->effective;
}
public function setEffective(?int $effective): self
{
$this->effective = $effective;
return $this;
}
}
addcompanie(template)
{{ form_start(formCompanie) }}
{{ form_widget(formCompanie) }}
<input type="submit" class="btn btn-dark" value="Ajouter" />
{{ form_end(formCompanie) }}
我真的不知道在哪里搜索。我检查了Symfony日志,但与此格式无关。
编辑
addarticle(模板)
{% extends 'layout.html.twig' %}
{% block title %}
{{ parent() }}Ajouter
{% endblock %}
{% block content %}
{{ render(controller('App\Controller\AddArticleController::addCompanie')) }}
{% endblock %}
解决方案
我倾倒了整个$请求变量,我注意到请求的方法是获取的,而不是发布。这是由于在辅助模板中调用控制器方法的渲染。原因是Symfony是通过Get方法来调用渲染函数,而不是通过Post方法来调用handlerequest。
为什么getMethod()返回"获取"而不是" post"?
您能在页面中显示表单的渲染吗?由于无效的动作值,因此表格不可能达到控制器的正确函数。
确保您已经配置了表单方法,handleRequest
如果方法不匹配