Ankündigung

Einklappen
Keine Ankündigung bisher.

Translation (TranslatorInterface) in FormTest schlägt fehl

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Symfony] Translation (TranslatorInterface) in FormTest schlägt fehl

    Hallo,

    Ich nutze zum Testen eines FormTypes Symfony3.4 . Der FormTest für gibt für eine Übersetzung einen TypeFehler:
    Code:
    ...
    TypeError: Return value of .... must be of the type string, null returned
    ...
    test_error.JPG

    RegisterType.php:
    PHP-Code:
    //.../Form/RegisterType.php
    <?php

    namespace App\Form;

    use 
    App\Entity\Reseller;
    use 
    Symfony\Component\Form\Extension\Core\Type\ChoiceType;
    ...
    use 
    Symfony\Component\Form\FormBuilderInterface;
    use 
    Symfony\Component\OptionsResolver\OptionsResolver;
    use 
    Symfony\Component\Validator\Constraints as Assert;

    class 
    RegisterType extends AppType {

        public function 
    buildForm(FormBuilderInterface $builder, array $options) {

            
    $translateLabel 'register_form.label.';

            
    $this->options $options;
            
    $this->setChoices();

            
    $builder
                
    ->add('company'TextType::class, [
                    
    'label' => $this->translator->trans($translateLabel 'company_name'),
                    
    'empty_data' => '',
                    
    'attr' => [
                        
    'placeholder' => $this->translator->trans($translateLabel 'company_name'),
                        
    'required' => true,
                        
    'maxlength' => 255,
                    ],
                    
    'constraints' => [
                        new 
    Assert\NotBlank([
                            
    'message' => $this->getMessageTranslation('notBlank'),
                        ]),
                        new 
    Assert\Length([
                            
    'max' => 255,
                            
    'maxMessage' => $this->getMessageTranslation('maxMessage', ['length' => 255]),
                        ]),
                    ],
                    ...
                ]);
        }

    }
    AppType.php:
    PHP-Code:
    //.../Form/AppType.php
    <?php

    namespace App\Form;

    use 
    Symfony\Component\Form\AbstractType;
    use 
    Symfony\Component\Translation\TranslatorInterface;

    class 
    AppType extends AbstractType {

        protected 
    $translator;

        public function 
    __construct(TranslatorInterface $translator) {
            
    $this->translator $translator;
        }

        protected function 
    getMessageTranslation(string $key, array $values = []): string{

            
    $value '';

            switch (
    $key) {
            case 
    'maxMessage':
                
    $value $this->translator->trans('asserts.maxlength', ['%length%' => $values['length']]);
                break;
            case 
    'notBlank':
                
    $value $this->translator->trans('asserts.notBlank');
                break;
            ...
            }

            return 
    $value;
        }
    }
    messages.de.yml (Translation)
    Code:
    ...
    asserts:
        ...
        notBlank: 'Dieses Feld darf nicht leer sein'
       ...
    ...
    RegisterTypeTest.php
    PHP-Code:
    <?php

    namespace Tests\App\Form;

    use 
    App\Entity\Reseller;
    use 
    App\Form\RegisterType;
    use 
    Symfony\Component\Form\PreloadedExtension;
    use 
    Symfony\Component\Form\Test\TypeTestCase;

    class 
    RegisterTypeTest extends TypeTestCase {

        private 
    $translator;

        protected function 
    setUp() {

            
    $this->translator $this->createMock('Symfony\\Component\\Translation\\TranslatorInterface');

            
    parent::setUp();
        }

        protected function 
    getExtensions() {

            
    $type = new RegisterType($this->translator);

            return [new 
    PreloadedExtension([$type], [])];
        }

        public function 
    testSubmitValidData() {

            
    $listCorporateForm = [];
            
    $listCountry = [];
            
    $listIndustrySector = [];

            
    $form $this->factory->create(RegisterType::class, new Reseller(), [
               ...
            ]);

        }
    }
    Warum gibt der Translator null zurück?

    Gruss Rammi


  • #2
    Hi, niemand eine Idee? oder fehlen Angaben? Bislang habe ich keine Lösung gefunden, wäre nett wenn doch noch jemand mir helfen könnte...

    Kommentar


    • #3
      Du weißt schon, das Translation Messages eigentlich automatisch übersetzt werden, wenn die Translation Component installiert ist. Ich sehe hier also keinen Grund hier eine eigene Methode zu schreiben.
      https://symfony.com/doc/current/vali...nslations.html

      Kommentar


      • #4
        Zitat von Zeichen32 Beitrag anzeigen
        Du weißt schon, das Translation Messages eigentlich automatisch übersetzt werden, wenn die Translation Component installiert ist....
        Vielen Dank für den Hinweis, ich schau mir das an

        Kommentar

        Lädt...
        X