2017-02-25 1 views
2

Ich versuche, Formularvalidierung in Symfony 3, jedoch habe diesen Fehler zu verwenden:Symfony 3 Formularvalidierung: Typ konnte nicht geladen werden

Could not load type \"AppBundle\Entity\AccountSheet\ in /var/www/mywebsite/vendor/symfony/symfony/src/Symfony/Component/Form/FormRegistry.php

Hier sind die Definitionen:

src/AppBundle/Regler /AccountSheetController.php

<?php 
    namespace AppBundle\Controller; 

    use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
    use Symfony\Component\HttpFoundation\Request; 
    use Symfony\Component\HttpFoundation\JsonResponse; 
    use Symfony\Component\HttpFoundation\Response; 
    use FOS\RestBundle\Controller\Annotations as Rest; 
    use AppBundle\Form\Type\AccountSheetType; 
    use AppBundle\Entity\AccountSheet; 

    class AccountSheetController extends Controller{ 
[...] 
    /** 
    * @Rest\View(statusCode=Response::HTTP_CREATED) 
    * @Rest\Post("/account/{account_id}/sheet") 
    */ 
    public function postAccountSheetsAction($account_id, Request $request){ 
     $account = $this->get('doctrine.orm.entity_manager') 
       ->getRepository('AppBundle:Account') 
       ->find($account_id); 

     if(empty($account)) 
      return $this->notFound('AccountSheet'); 

     $aSheet = new AccountSheet(); 
     $aSheet->setAccount($account); 

     $form = $this->createForm(AccountSheet::class, $aSheet); 
     $form->submit($request->request->all()); 

     if ($form->isValid()) { 
      $em = $this->get('doctrine.orm.entity_manager'); 
      $em->persist($aSheet); 
      $em->flush(); 

      return $aSheet; 
     } 

     return $form; 
    } 
[...] 
} 

src \ AppBundle \ Formular \ Art \ AccountSheetType.php

<?php 
    namespace AppBundle\Form\Type; 

    use Symfony\Component\Form\AbstractType; 
    use Symfony\Component\Form\FormBuilderInterface; 
    use Symfony\Component\OptionsResolver\OptionsResolver; 
    use AppBundle\Entity\AccountSheet; 

    class AccountSheetType extends AbstractType 
    { 
     public function buildForm(FormBuilderInterface $builder, array $options) 
     { 
      $builder->add('name'); 
     } 

     public function configureOptions(OptionsResolver $resolver) 
     { 
      $resolver->setDefaults([ 
       'data_class' => AccountSheet::class, 
       'csrf_protection' => false 
      ]); 
     } 

    } 

src/AppBundle/Ressourcen/config/validation.yml

AppBundle\Entity\AccountSheet: 
    properties: 
     name: 
      - NotBlank: ~ 
      - Type: string 

app/config/config.yml

framework: 
    validation:  { enabled: true, enable_annotations: false } 

ich wahrscheinlich etwas verpasst aber Symfony ist immer noch neu für mich und ich habe keine Ideen mehr.

+0

Können Sie versuchen data_class Wert in configureOptions Methode ersetzt (src \ AppBundle \ Formular \ Art \ AccountSheetType.php) mit dem AccountSheet Klasse Namespace? 'AppBundle \ Entity \ AccountSheet' –

+0

Bereits versucht, dasselbe Ergebnis:/ – AnomalySmith

Antwort

1

ändern

$form = $this->createForm(AccountSheet::class, $aSheet); 

zu

$form = $this->createForm(AccountSheetType::class, $aSheet); 
+0

Nun, Erschöpfung denke ich :) Danke! – AnomalySmith

+0

Ich bin froh, dass es funktioniert hat. Ich weiß, ist offtopic, aber Sie könnten versuchen, $ form-> handleRequest ($ request); if ($ form-> isValid()) {...} '. –

+0

Aufgrund anderer REST-Beschränkungen im Projekt wird manuelle Übermittlung verwendet, aber ich schätze Ihre Sorgfalt! – AnomalySmith

Verwandte Themen