turk porno porno escort rokettube
Ergebnis 1 bis 6 von 6

Thema: Veränderung jeder Item von Collection

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

    Standard Veränderung jeder Item von Collection

    Hallo,

    Entschuldigen Sie für mein schlecht Deutschsprache aber ich habe eine Frage.

    Es gibt ein Fieldset, der ein element Collection enthält

    Code:
    class IngredientFieldset extends Fieldset implements InputFilterProviderInterface
    {
        public function __construct(ObjectManager $objectManager)
        {
            parent::__construct('ingredient');
    
            $this->setHydrator(new DoctrineHydrator($objectManager))
                 ->setObject(new Ingredient());
            
            /*iregendwelche felden*/
    
            $this->add(array(
                'type'    => 'Zend\Form\Element\Collection',
                'name'    => 'measurementIngredient',
                'options' => array(
                    'target_element' => new MeasureIngredFieldset($objectManager),
               )
            ));
    
            /*iregendwelche felden*/
        }
    }
    Target element MeasureIngredFieldset sieht aus:

    Code:
    class MeasureIngredFieldset extends Fieldset implements InputFilterProviderInterface
    {
        public function __construct(ObjectManager $objectManager)
        {
            parent::__construct('measurementIngredient');
            
            $this->setHydrator(new DoctrineHydrator($objectManager))
                 ->setObject(new MeasureIngred());
            
            $this->add(array(
                'type' => 'Zend\Form\Element\Hidden',
                'name' => 'id'
            ));
            
            $this->add(array(
                'name' => 'measurement',
                'type' => '\Zend\Form\Element\Checkbox',
                'options' => array(
                    'label' => 'test',  
                    'use_hidden_element' => true,
                    'checked_value' => '2',
                    'unchecked_value' => '0',
                ),
            ));
            
            $this->add(array(
                'name' => 'gramm',
                'type' => '\Zend\Form\Element\Text',
                'options' => array(
                    'label' => 'Количество, г'
                ),
                'attributes' => array(
                    'class' => 'form-control'
                )
            ));
        }
    }
    Und ich schreibe folgende code in meinem Controller:
    Code:
    $measurements = $this->getEntityManager()->getRepository('Recipe\Entity\Measurement')->findBy(array('activate' => 1));
    $measurementIngredient = $form->get('ingredient')->get('measurementIngredient');
    $measurementIngredient->setCount(count($measurements));
    Es arbeitet gut, und ich stelle Count im Collection erfolgreich hin. Aber ich brauche verschidene Label und verschidene checked_value im Feld 'measurement' in jeder Item dieser Collection zu haben. Hilfen Sie mir bitter.

    Folgende code in meiner Controller arbeitet nicht
    Code:
    $measurementIngredient = $form->get('ingredient')->get('measurementIngredient')->getFieldsets()
    Ich kann nich jeder Item von Collection im foreach durchsehen.

    Viele Grüße,
    Sergey.

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

    Standard

    Leute,

    ich verstehe, dass es vielleicht sehr seltsame Frage ist, aber ich kann nicht die Antwort nirgendwo suchen. Wie kann ich im Controller jeder Item von Collection im foreach durchsehen und label mit checked_value veränderen?

    Hilfen Sie Mir bitte

    Viele Grüße,
    Sergey.

  3. #3
    Benutzer
    Registriert seit
    30.05.2009
    Ort
    München
    Beiträge
    84
    Thanks
    0
    Thanked 37 Times in 14 Posts

    Standard

    Nachdem prepare() auf das Formular aufgerufen wurde kannst du ganz regulär über collections iterieren!

    Wieso benötigst du unterschiedliche checked_value Werte? Vielleicht liegt der Fehler schon im Ansatz

  4. #4
    Neuer Benutzer
    Registriert seit
    01.05.2015
    Beiträge
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Hallo michl. Danke für deine Antwort

    Es arbeitet wirklich! Nachdem prepare() kann ich collections iterieren! Ich verändere Label erfolgreich.

    Aber wenn ich dort anhand setCheckedValue() checked_value Werte verändert, erhalte ich "The input was not found in the haystack" bei submit des Formular. Mein code:

    Code:
    $form = $this->form;
    $form->prepare();
    $filedsets = $form->get('ingredient')->get('measurementIngredient')->getFieldsets();
    $i=0;
    foreach($measurements as $measure){
      $filedsets[$i]->get('measurement')->setLabel($measure->getFullName());
      $filedsets[$i]->get('measurement')->setCheckedValue($measure->getId());
      $i++;
    }
    Ja, vielleich liegt der Fehler schon im Ansatz. Ich werde meine Ziel beschreiben, vielleicht gibt es andere Lösung.

    Es ist eine Seite für Küche und Rezepten. Hier wird man Rechner des Kalorie sein. Ich habe die Tabelen Ingredient und Measurement. Und für jeder Ingredient müss ich einige measurements auswählen und für jeder measurement die Menge in Gramm zeigen.

    Also im Formel "Add ingredient" habe ich Liste alles Measurements und für jeder Measurements ein input feld, folgende code:
    Code:
    class IngredientFieldset extends Fieldset implements InputFilterProviderInterface
    {
        public function __construct(ObjectManager $objectManager)
        {
            parent::__construct('ingredient');
    
            $this->setHydrator(new DoctrineHydrator($objectManager))
                 ->setObject(new Ingredient());
            
            /*iregendwelche felden*/
    
            $this->add(array(
                'type'    => 'Zend\Form\Element\Collection',
                'name'    => 'measurementIngredient',
                'options' => array(
                    'target_element' => new MeasureIngredFieldset($objectManager),
               )
            ));
    
            /*iregendwelche felden*/
        }
    }
    hier "measurementIngredient" ist Liste der Measurements, und

    Code:
    class MeasureIngredFieldset extends Fieldset implements InputFilterProviderInterface
    {
        public function __construct(ObjectManager $objectManager)
        {
            parent::__construct('measurementIngredient');
            
            $this->setHydrator(new DoctrineHydrator($objectManager))
                 ->setObject(new MeasureIngred());
            
            $this->add(array(
                'type' => 'Zend\Form\Element\Hidden',
                'name' => 'id'
            ));
            
            $this->add(array(
                'name' => 'measurement',
                'type' => '\Zend\Form\Element\Checkbox',
                'options' => array(
                    'label' => 'test',  
                    'use_hidden_element' => true,
                    'checked_value' => '2',
                    'unchecked_value' => '0',
                ),
            ));
            
            $this->add(array(
                'name' => 'gramm',
                'type' => '\Zend\Form\Element\Text',
                'options' => array(
                    'label' => 'Количество, г'
                ),
                'attributes' => array(
                    'class' => 'form-control'
                )
            ));
        }
    }
    jeder Item in Liste des Measurements.

    Eigentlich, jeder "measurement" in collection muss verschidene "checked_value" (measurement_id) haben. Vielleicht gibt es noch ein Lösung?

    Wenn andere Lösung es gibt nicht, wie kann man "The input was not found in the haystack" berichtigen?

    Ich kann nich DoctrineModule\Form\Element\ObjectMultiCheckbox benutzen, weil man noch input feld "gramm" braucht.

    P.S. Ich verstehe, dass es nicht sehr einfach Frage ist, aber ich werde für deine Hilfe danbar sein.

    Viele Grüße,
    Sergey.

  5. #5
    Benutzer
    Registriert seit
    30.05.2009
    Ort
    München
    Beiträge
    84
    Thanks
    0
    Thanked 37 Times in 14 Posts

    Standard

    Der prepare() Aufruf sollte nicht im Controller stattfinden
    Form Collections — Zend Framework 2 2.4.0 documentation - Zend Framework
    the prepare() method. You must call it prior to rendering anything in the view (this function is only meant to be called in views, not in controllers).

    Ich hab leider noch nicht ganz verstanden wie Die Formulare später aussehen sollen.
    Kannst du das vielleicht nochmal auf englisch beschreiben?


    Einen Hinweis hab ich allerdings vorab noch:

    Die konkreten values für deine Checkboxen sollten bereits beim hydrieren stehen!
    Es ist wenig sinnvoll im Nachgang über die Collections zu iterieren und dann Werte zu verändern. Siehe InArray Validator. Der lässt sich zwar deaktivieren, aber das willst du nicht

  6. #6
    Neuer Benutzer
    Registriert seit
    01.05.2015
    Beiträge
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Michl Entschuldig, dass ich so lange Zeit nicht antworte. Vielleicht ist es sehr seltsam, aber ich kann Englich nicht schreiben und sprechen((

    Meine Frage ist akute bisher.

    Ich habe ein Doctrine Entity mit dem Titel "Ingredient", der ein variable $measurementIngredient hat.

    Code:
    class Ingredient extends BaseEntity
    {
       ...
    
       /**
        * @ORM\OneToMany(targetEntity="\Recipe\Entity\MeasureIngred", mappedBy="ingredient", cascade={"persist", "remove"}, orphanRemoval=TRUE)
        */
       protected $measurementIngredient;
    
       public function __construct()
       {
           $this->measurementIngredient = new ArrayCollection();
       }
       
       public function addMeasurementIngredient(Collection $measurementIngredients)
       {
           foreach($measurementIngredients as $measurementIngredient){
              if (!$this->measurementIngredient->contains($measurementIngredient)) {
                   $this->measurementIngredient->add($measurementIngredient);
                   $measurementIngredient->setIngredient($this);
               }
           }
       }
       public function removeMeasurementIngredient(Collection $measurementIngredients)
       {
       foreach($measurementIngredients as $measurementIngredient){
               if ($this->measurementIngredient->contains($measurementIngredient)) {
                   $this->measurementIngredient->removeElement($measurementIngredient);
                    $measurementIngredient->setIngredient(null);
               }
           }
       }
    
       public function getMeasurementIngredient()
       {
           return $this->measurementIngredient->toArray();
       }
    ...
    Es gibt noch Entity mit dem Titel "Measurement", der auch ein variable $measurementIngredient hat.

    Code:
    class Measurement extends BaseEntity
    {
        
       /**
            * @ORM\OneToMany(targetEntity="\Recipe\Entity\MeasureIngred", mappedBy="measurement", cascade={"persist", "remove"}, orphanRemoval=TRUE)
            */
        protected $measurementIngredient;
       
           public function addMeasurementIngredient(MeasureIngred $measurementIngredient)
            {
                   if (!$this->measurementIngredient->contains($measurementIngredient)) {
                            $this->measurementIngredient->add($measurementIngredient);
                            $measurementIngredient->setMeasurement($this); 
            }
        }
       
           public function removeMeasurementIngredient(MeasureIngred $measurementIngredient)
            {
                    if ($this->measurementIngredient->contains($measurementIngredient)) {
                            $this->measurementIngredient->removeElement($measurementIngredient);
                $measurementIngredient->setMeasurement(null);
                    }
             }
    
             public function getMeasurementIngredient()
             {
                     return $this->measurementIngredient;
             }
    }
    ...
    Diese Entities verbinden miteinander anhand Entity MeasureIngred:

    Code:
    class MeasureIngred
    {
       /**
         * @var integer
         * @ORM\Id
        * @ORM\Column(type="integer", options={"unsigned"=true})
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;
       
       /**
         * @ORM\ManyToOne(targetEntity="\Recipe\Entity\Measurement", inversedBy="measurementIngredient")
         * @ORM\JoinColumn(name="measurement_id", referencedColumnName="id", nullable=FALSE)
         */
        protected $measurement;
    
        /**
          * @ORM\ManyToOne(targetEntity="\Recipe\Entity\Ingredient", inversedBy="measurementIngredient")
          * @ORM\JoinColumn(name="ingredient_id", referencedColumnName="id", nullable=FALSE)
          */
        protected $ingredient;
       
       /**
         * @ORM\Column(type="float", scale=2)
         */
        protected $gramm;
    
        public function getId()
        {
            return $this->id;
        }
    
        public function setId($id)
        {
            $this->id = $id;
        }
    
        public function getMeasurement()
        {
            return $this->measurement;
        }
    
        public function setMeasurement(Measurement $measurement = null)
        {
            $this->measurement = $measurement;
        }
    
        public function getIngredient()
        {
            return $this->ingredient;
        }
    
        public function setIngredient(Ingredient $ingredient = null)
        {
            $this->ingredient = $ingredient;
        }
       
       public function getGramm()
        {
            return $this->gramm;
        }
    
        public function setGramm($gramm)
        {
            $this->gramm = $gramm;
        }
    
        public function __toString(){
            return (string)$this->getId();
        }
    }
    Ich habe große Probleme. Wie habe ich oben geschrieben, ich habe IngredientFieldset und MeasureIngredFieldset.

    Ich schaffe in IngredientFieldset die Collection mit dem name "measurementIngredient". Und ich brauche, dass auf Formel alles Werte der Measurement von databank sein werden. Aber gitb es ein Schwerichkeit, dass es in MeasureIngred ein Field "Gramm" gibt.

    Wie kann ich die Werte von databanke binden:

    Code:
      $this->add(array(
        'type'    => 'Zend\Form\Element\Collection',
        'name'    => 'measurementIngredient',
        'options' => array(
           'target_element' => new MeasureIngredFieldset($objectManager),
        )
    ));
    Ich habe gedacht, dass ich DoctrineModule\Form\Element\ObjectMultiCheckbox benutzen kann, aber ich habe ein Field "Gramm" und ich weiß nicht was kann ich machen.

Ähnliche Themen

  1. collection von objekten
    Von pk67 im Forum DB
    Antworten: 1
    Letzter Beitrag: 15.07.2013, 10:09
  2. Antworten: 1
    Letzter Beitrag: 06.03.2011, 17:16
  3. Dojo JSON Rückgabe Item ausgeben
    Von Basti im Forum Javascript + RIA
    Antworten: 0
    Letzter Beitrag: 13.09.2010, 01:47
  4. Zend CSS Änderung wird nicht wirksam
    Von 1234d1 im Forum Einsteigerfragen
    Antworten: 2
    Letzter Beitrag: 01.09.2010, 16:49
  5. Zend_Studio erstellen von Zend Framework Item
    Von mbecker im Forum IDE's, Debugging & Profiling
    Antworten: 0
    Letzter Beitrag: 26.05.2009, 20:17

Lesezeichen

Berechtigungen

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