Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-07-2014 17:16:57

pascalFo
Membre
Date d'inscription: 17-07-2014
Messages: 13

Probleme avec Hydrator

Bonjour voici le PB que j'ai :  Catchable fatal error: Argument 1 passed to Album\Model\AlbumTable::saveAlbum() must be an instance of Album\Model\Album, instance of ArrayObject given, called in C:\wamp\www\zend\test\module\Album\src\Album\Controller\IndexController.php on line 74 and defined in C:\wamp\www\zend\test\module\Album\src\Album\Model\AlbumTable.php on line 36

et voici les deux fonction concerner :

la fonction edition dans le fichier IndexController.php

public function editAction() 
    { 
        $data = array();
        $id = (int)$this->getEvent()->getRouteMatch()->getParam('id');
        if (!$id) {
            return $this->redirect()->toRoute('album', array('action'=>'add'));
        }
        try {
            $album = $this->_getAlbumTable()->getAlbum($id);
        }
        catch (\Exception $ex) {
            return $this->redirect()->toRoute('album', array(
                'action' => 'index'
            ));
        }

        $form = new AlbumForm();
        $form->bind($album);
        $form->get('submit')->setAttribute('label', 'Edit');
        $request = $this->getRequest();
        if ($request->isPost()) {
            //$form->setInputFilter($album->getInputFilter());
            $form->setData($request->getpost());
            if ($form->isValid()) {
                   $album->exchangeArray($form->getData());
                  $this->_getAlbumTable()->saveAlbum($album);
                // Redirect to list of albums
                  return $this->redirect()->toRoute('album');
            }
        }

        return array(
        'id' => $id,
        'form' => $form,
        "data" => $album,
        );
    } 

et la fonction dans le fichier AlbumTable.php

public function saveAlbum(Album $album)
    {
        $data = array(
            'artist' => $album->artist,
            'title' => $album->title,
        );
        $id = (int)$album->id;
       
        if ($id == 0) {
            $this->insert($data);
        } else {
            if ($this->getAlbum($id)) {
                $this->update($data, array('id' => $id));
            } else {
                throw new \Exception('Form id does not exist');
            }
        }
    }

j'ai essayer des solutions mais sans success voici une solution que j'ai essayer en mettant cette fonction dans la classe Album et j'ai aussi la fonction exchangeArray dans ma classe Album.php

public function getArrayCopy()
    {
        return get_object_vars($this);
    }

je suis a la recherche de solution s'il vous plait je veut de l'aide

Hors ligne

 

#2 29-07-2014 08:08:51

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Probleme avec Hydrator

Hello smile

Alors ton erreur c'est : la fonction saveAlbum a besoin d'un objet album pour marcher. hors tu lui passe un tableau.

vérifie que ton album st bien déclaré correctement.
Personnellement avant :
$album = $this->_getAlbumTable()->getAlbum($id);

je tenterais un : $album = new Album();

Hors ligne

 

#3 29-07-2014 14:29:46

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Probleme avec Hydrator

Salut, ça ne sert à rien d'instancier un nouvel objet pour l'écraser juste derrière ... Faut simplement vérifier que getAlbum renvoi un objet de type Album ou un array et là visiblement c'est un array.

PS : pour récupérer l'id en fonction de la route $this->param('id', null) suffit où null est la valeur par défaut.

Hors ligne

 

#4 29-07-2014 16:13:25

pascalFo
Membre
Date d'inscription: 17-07-2014
Messages: 13

Re: Probleme avec Hydrator

je lai fait dans des possibiliter de solution mais sa ne marche pas le probleme reste toujours même si dans ma fonction getAlbum je renvoie un type Album

flobrflo a écrit:

Hello smile

Alors ton erreur c'est : la fonction saveAlbum a besoin d'un objet album pour marcher. hors tu lui passe un tableau.

vérifie que ton album st bien déclaré correctement.
Personnellement avant :
$album = $this->_getAlbumTable()->getAlbum($id);

je tenterais un : $album = new Album();

Hors ligne

 

#5 29-07-2014 16:17:20

pascalFo
Membre
Date d'inscription: 17-07-2014
Messages: 13

Re: Probleme avec Hydrator

voici ma fonction getAlbum
public function getAlbum($id)
    {
        $id = (int) $id;
        $rowset = $this->select(array('id' => $id));
        $row = $rowset->current();
        if (!$row) {
            throw new \Exception("Could not find row $id");
        }
        return $row;
    }
s'il te plait je ne comprend pas ce que tu veut dire sur la manière de recéprer la route

Orkin a écrit:

Salut, ça ne sert à rien d'instancier un nouvel objet pour l'écraser juste derrière ... Faut simplement vérifier que getAlbum renvoi un objet de type Album ou un array et là visiblement c'est un array.

PS : pour récupérer l'id en fonction de la route $this->param('id', null) suffit où null est la valeur par défaut.

Hors ligne

 

#6 29-07-2014 17:53:36

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Probleme avec Hydrator

Ca résous pas le problème faut savoir ce que te renvoi $row et pour moi ça te renvoi un tableau. J'utilise pas Zend\Db donc j'en mettrais pas ma main à couper donc test avec un var_dump($row);

Tu peux remplacer $id = (int)$this->getEvent()->getRouteMatch()->getParam('id'); par $this->param('id', null);

Hors ligne

 

#7 29-07-2014 18:46:41

pascalFo
Membre
Date d'inscription: 17-07-2014
Messages: 13

Re: Probleme avec Hydrator

Oui mon $row renvoie un tableau mais pas de type Album un tableau simple comment faire en sorte qu'il soit un tableau de type Album et pour ce qui est de remplacer la ligne dont tu fait allusion sa renvoie une erreur

Orkin a écrit:

Ca résous pas le problème faut savoir ce que te renvoi $row et pour moi ça te renvoi un tableau. J'utilise pas Zend\Db donc j'en mettrais pas ma main à couper donc test avec un var_dump($row);

Tu peux remplacer $id = (int)$this->getEvent()->getRouteMatch()->getParam('id'); par $this->param('id', null);

Hors ligne

 

#8 29-07-2014 23:35:33

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Probleme avec Hydrator

Excuses moi c'est $this->params('id', null) pas $this->param('id', null) j'ai zappé le "S". Je te le dis quand même dans le cas où tu as une erreur c'est mieux de donner l'erreur. Quand tu vas chez le docteur tu dis pas "j'ai mal" ...

Pour ton problème je ne peux que t'encourager à apprendre le PHP avant de te lancer dans l'apprentissage d'un framework ... Un tableau en PHP est un tableau pas un album ou quoi que se soit. Un tableau reste un array quel que soit son contenu. Donc c'est à toi de transformer ce tableau en objet de type Album mais là c'est plus un problème ZF2 c'est un problème PHP.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages