Bonjour à tous,
Je suis en train me former à Zend Framework 2 en suivant le tutoriel officiel (http://framework.zend.com/manual/2.1...plication.html). Et j'essaie de l'adapter à ma base de données.
Mon problème vient du fait que toutes mes tables sont préfixées par deux lettres suivies d'un underscore (configurable à l'instalation de la base de données). Et j'aimerai que la classe AlbumTable garde ce nom au lieu de xx_AlbumTable.
Voici la classe AlbumTable (reprise du tuto) située dans le répertoire module/Album/src/Album/Model :
J'ai donc essayé de modifier le nom de la table dans le constructor en faisant un set table, mais j'ai l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 ?php namespace Album\Model; use Zend\Db\TableGateway\TableGateway; class AlbumTable { protected $tableGateway; public function __construct(TableGateway $tableGateway) { $this->tableGateway = $tableGateway; } public function fetchAll() { $resultSet = $this->tableGateway->select(); return $resultSet; } public function getAlbum($id) { $id = (int) $id; $rowset = $this->tableGateway->select(array('id' => $id)); $row = $rowset->current(); if (!$row) { throw new \Exception("Could not find row $id"); } return $row; } public function saveAlbum(Album $album) { $data = array( 'artist' => $album->artist, 'title' => $album->title, ); $id = (int)$album->id; if ($id == 0) { $this->tableGateway->insert($data); } else { if ($this->getAlbum($id)) { $this->tableGateway->update($data, array('id' => $id)); } else { throw new \Exception('Form id does not exist'); } } } public function deleteAlbum($id) { $this->tableGateway->delete(array('id' => $id)); } }
A priori, la classe TableGateway n’autorise pas la modification de la table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Invalid magic property access in Zend\Db\TableGateway\AbstractTableGateway::__set()
Je vois pour l'instant qu'une solution qui est de créée une classe qui hérite de TableGateway en modifiant dans son construtor le nom de la table. Mais ça me plait pas trop car il faudra faire ça pour toutes mes tables !
Je voudrais savoir s'il y avait une solution "plus élégante", c'est-à-dire plus une solution avec moins de code à écrire.
Partager