Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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
Hello
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
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
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
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
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
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
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
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