turk porno porno escort rokettube
Ergebnis 1 bis 3 von 3

Thema: Formular mit Doctrine speichert Relation nicht

  1. #1
    Neuer Benutzer
    Registriert seit
    21.11.2018
    Beiträge
    2
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard Formular mit Doctrine speichert Relation nicht

    Hallo,

    ich steige grad in Zend3 ein und stehe vor dem Problem das mein Formular mit einer Beziehung zu einem anderen Model einfach nicht gespeichert wird.

    Ich musste die Annotations entfernen, da das Board mir sonst den Fehler gab: Post denied. New posts are limited by number of URLs it may contain and checked if it doesn't contain forbidden words.

    Ich habe Kategorien die Einträge enthalten können.


    PHP-Code:
    class Category extends AbstractEntity
    {
        use 
    Nameable;


         private 
    $issue;

         private 
    $entries;



    PHP-Code:
    class Entry extends AbstractEntity
    {
        use 
    Nameable;

        private 
    $amount;

        protected 
    $category;
     
        private 
    $dateOfEntry;

    Das Fieldset sieht wie folgt aus:

    PHP-Code:
    class EntryFieldSet extends Fieldset
    {
        public function 
    init()
        {
            
    $this->add([
                
    'name' => 'id',
                
    'type' => Hidden::class
            ]);

            
    $this->add([
                
    'name' => 'name',
                
    'type' => Text::class,
                
    'options' => [
                    
    'label' => 'Name'
                
    ]
            ]);

            
    $this->add([
                
    'name' => 'amount',
                
    'type' => Number::class,
                
    'options' => [
                    
    'label' => 'Summe'
                
    ]
            ]);

            
    $this->add([
                
    'name' => 'date_of_entry',
                
    'type' => Date::class,
                
    'options' => [
                    
    'label' => 'Datum'
                
    ]
            ]);

            
    $this->add([
                
    'name' => 'category',
                
    'required' => false,
                
    'type' => ObjectSelect::class,
                
    'options' => [
                    
    'target_class' => Category::class,
                ]
            ]);

            
    parent::init();
        }

    Und der Filter um die Parameter zu konvertieren (ähnlich den ParamConverter in SF)

    PHP-Code:
    class EntryFieldSetFilter extends InputFilter
    {
        protected 
    $mapper;

        public function 
    __construct(MapperInterface $mapper)
        {
            
    $this->mapper $mapper;
        }

        public function 
    init()
        {
            
    $this->add([
                
    'name' => 'name',
                
    'required' => true,
                
    'filters' => [
                    [
    'name' => StringTrim::class]
                ],
                
    'validators' => [
                    [
                        
    'name' => StringLength::class,
                        
    'options' => [
                            
    'min' => 5
                        
    ]
                    ]
                ]
            ]);

            
    $this->add([
                
    'name' => 'date_of_entry',
                
    'required' => true,
                
    'filters' => [
                    [
                        
    'name' => Callback::class,
                        
    'options' => [
                            
    'callback' => [$this'convertStringToDate']
                        ]
                    ]
                ]
            ]);

            
    $this->add([
                
    'name' => 'category',
                
    'required' => true,
                
    'filters' => [
                    [
                        
    'name' => Callback::class,
                        
    'options' => [
                            
    'callback' => [$this'loadCategory']
                        ]
                    ]
                ]
            ]);
        }

        public function 
    convertStringToDate(string $date)
        {
            return new \
    DateTime($date);
        }

        public function 
    loadCategory(string $categoryId)
        {
            
    // PHP Notice:  Object of class CashJournal\Model\Category could not be converted to int in
            
    return $this->mapper->find($categoryId);
        }

    Ich nutze Doctrine2 und das speichern ohne Relation funktioniert fehlerfrei.
    Mit dem Filter bricht Zend mit der Fehlermeldung:

    PHP Notice: Object of class CashJournal\Model\Category could not be converted to int in

    ab. Lasse ich alles so, wird das speichern ebenfalls verwehrt mittels "The input is not a valid step".

    Der Setter bei der Entry Entity erwartet allerdings ein Category Object. Der Filter sollte doch dafür die richtige Stelle sein, oder?
    Der Mapper leitet die Daten direkt an den EntityManager weiter und führt ein persist() und flush() aus.

    Wie bekomme ich das Formular zum laufen, oder habe ich hier einen falschen Ansatz?

  2. #2
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.544
    Thanks
    4
    Thanked 357 Times in 288 Posts

    Standard

    Willkommen im Forum!

    Zitat Zitat von rob5 Beitrag anzeigen
    ich steige grad in Zend3…
    Ich finde es spannend, woher immer diese Namen kommen? „Zend3“ ist mir zumindest nicht bekannt!

    (Es ist und bleibt „Zend Framework“ oder kurz „ZF“ )


    Zitat Zitat von rob5 Beitrag anzeigen
    Das Fieldset sieht wie folgt aus:

    PHP-Code:
    class EntryFieldSet extends Fieldset
    {
            
    $this->add([
                
    'name' => 'category',
                
    'required' => false,
                
    'type' => ObjectSelect::class,
                
    'options' => [
                    
    'target_class' => Category::class,
                ]
            ]);
        }

    Leider kann ich dir hier nicht folgen, denn die Option „target_class“ gibt es in zend-form nicht.

    Zitat Zitat von rob5 Beitrag anzeigen
    Und der Filter um die Parameter zu konvertieren (ähnlich den ParamConverter in SF)
    Ähnlich dem „ParamConverter“ im Symfony Framework? Eher nicht, denn der Konverter in SF wandelt Parameter von HTTP-Anfragen in Objekte. Der Input-Filter im ZF prüft und filtert Werte die übergeben werden, die Quelle ist dabei egal. Der Input-Filter ist damit nicht auf HTTP-Anfragen beschränkt und konvertiert auch nicht zwangsläufig; auch nicht in ein Objekt.

    Zitat Zitat von rob5 Beitrag anzeigen
    Lasse ich alles so, wird das speichern ebenfalls verwehrt mittels "The input is not a valid step".
    Die Meldung kommt vom Validator „Step“, welcher bei dir im Feld „amount“ hinzugefügt wird.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  3. #3
    Neuer Benutzer
    Registriert seit
    21.11.2018
    Beiträge
    2
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Hallo Kaiuwe,

    danke für Hilfe. Ich habe das Problem gefunden.

    Ich wollte mit einem Konverter die Parameter in Objekte umwandeln, weil es scheinbar durch doctrine nicht geschehen ist.
    Das war aber ein Irrtum. Ich habe einen falschen Hydrator genutzt. Mein Testprojekt ist vom kleinen Hello-World gewachsen und dieses Detail habe ich dann gekonnt ignoriert.

    Ich habe dummerweise hier die Factory nicht gepostet. Vielmehr weil ich den Fehler woanders vermutet hatte.


    PHP-Code:
    $fieldSet->setHydrator(            new DoctrineObject($entityManager)                               ); 
    Hier hatte ich als Hydrator

    PHP-Code:
    new Classmethods() 
    stehen.

    Den Step habe ich auf "any" gesetzt. Damit ist die Meldung auch passè. Nun ist das Verhalten so wie ich es erwarte

Ähnliche Themen

  1. Doctrine und Relation von Entities
    Von Luka im Forum 3rd Party Tools
    Antworten: 9
    Letzter Beitrag: 20.08.2014, 20:44
  2. Frage zu Doctrine und Relation von Entities
    Von kakktus im Forum ZF2 Einsteigerfragen
    Antworten: 1
    Letzter Beitrag: 20.04.2014, 17:37
  3. Formular mit Doctrine: "method" ist immer "get"
    Von DaFe3108 im Forum ZF2 Einsteigerfragen
    Antworten: 6
    Letzter Beitrag: 24.07.2013, 13:28
  4. Doctrine 2 - 0:1 Relation
    Von Krusty im Forum 3rd Party Tools
    Antworten: 1
    Letzter Beitrag: 08.04.2013, 13:09
  5. Session speichert nicht richtig
    Von klaus24 im Forum Core
    Antworten: 10
    Letzter Beitrag: 05.01.2010, 18:56

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •