简体   繁体   中英

Symfony form not working properly if a field is empty or not exists

To edit the entity training, I use the TrainingFormType like this:

public function editTraining(Training $training) {
    $form = $this->createForm(TrainingFormType::class, $training);
    $form->submit($request->request->all());

The form has a field title:

->add('title', TextType::class, [
      'constraints' => [
          new NotBlank(),
          new Length(null, null, 50)
]])

If I pass in the request an empty value into the field title "title": "" , I get an error 500:

"Expected argument of type "string", "null" given at property path "title".". I expected here an error from the form, not the InvalidArgumentException

When using the same form for creating of a new training, everything works fine, a validation error is generated, as expected:

"title": {
          "errors": [
            "This value should not be blank."
          ]
},

It's how I use the form when creating a new training:

$training = new Training();
$form = $this->createForm(TrainingFormType::class, $training);
$form->submit($request->request->all());

How to solve this problem? I thought, I can resolve it using an so called IgnoreNonSubmittedFieldListener, but on this way it also doesn't work. I get the same error.

One possible solution is to set a sensible default in the Training entity for that field:

// in Training.php

// ORM mapping omitted:
private string _title = '';

Then when a new entity is created it will have that value.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM