Rajout d'un Gestionnaire de modèle générique
authorSébastien CHAZALLET <s.chazallet@gmail.com>
Tue, 6 Nov 2012 23:45:39 +0000 (00:45 +0100)
committerSébastien CHAZALLET <s.chazallet@gmail.com>
Tue, 6 Nov 2012 23:45:39 +0000 (00:45 +0100)
vendor/zf2biz/Custom/Model/Manager.php [new file with mode: 0644]
vendor/zf2biz/Custom/autoload_classmap.php

diff --git a/vendor/zf2biz/Custom/Model/Manager.php b/vendor/zf2biz/Custom/Model/Manager.php
new file mode 100644 (file)
index 0000000..e7ae619
--- /dev/null
@@ -0,0 +1,113 @@
+<?php
+namespace Custom\Model;
+
+use Zend\Db\Adapter\Adapter;
+use Zend\Db\ResultSet\ResultSet;
+use Zend\Db\TableGateway\AbstractTableGateway;
+
+abstract class Manager extends AbstractTableGateway
+{
+
+    protected $entity;
+
+    public function __construct(
+        Adapter $adapter,
+        Entity $entity
+    ) {
+        // Composition avec l'adaptateur
+        $this->adapter = $adapter;
+
+        // Composition avec l'entité
+        $this->entity = $entity;
+
+        // Utilisation du patron de conception Prototype
+        // pour la création des objets ResultSet
+        $this->resultSetPrototype = new ResultSet();
+        $this->resultSetPrototype->setArrayObjectPrototype(
+            $entity
+        );
+
+        // Initialisation du gestionnaire
+        $this->initialize();
+    }
+
+    public function all()
+    {
+        return $this->select();
+    }
+
+    public function one($primary_array=array())
+    {
+        if (!count($primary_array)) {
+            $row = null;
+        } else {
+            $valid = true;
+            foreach($primary_array as $p) {
+                if ($p === null) {
+                    $row = null;
+                    $valid = false;
+                    break;
+                }
+            }
+            if ($valid) {
+                $row = $this->select($primary_array)->current();
+            }
+        }
+        if (!$row) {
+            $keys = array();
+            foreach($primary_array as $k => $v) {
+                $keys[] = "{$k}: {$v}";
+            }
+            $keys = implode(', ', $keys);
+            throw new \Exception("cannot get row {{$keys}} in table 'galerie'");
+        }
+        return $row;
+    }
+
+    public function any($primary_array)
+    {
+        if (!count($primary_array)) {
+            $row = null;
+        } else {
+            $valid = true;
+            foreach($primary_array as $p) {
+                if ($p === null) {
+                    $row = null;
+                    $valid = false;
+                    break;
+                }
+            }
+            if ($valid) {
+                $row = $this->select($primary_array)->current();
+            }
+        }
+        return $row;
+    }
+
+    protected abstract function is_new(Entity $entity);
+    protected abstract function extract_primary(Entity $entity);
+    public function save(Entity $entity)
+    {
+        if ($this->is_new()) {
+            $this->insert(
+                $entity->toUpdatableArray()
+            );
+        } elseif ($this->getGalerie(extract_primary($entity))) {
+            $this->update(
+                $entity->toUpdatableArray(),
+                $entity->toPrimaryArray()
+            );
+        } else {
+            $keys = array();
+            foreach($primary_array as $k => $v) {
+                $keys[] = "{$k}: {$v}";
+            }
+            $keys = implode(', ', $keys);
+            throw new \Exception("cannot update row {{$keys}} in table 'galerie'");
+        }
+    }
+
+    // La fonction delete du père suffit à notre besoin.
+
+}
index e7ebc58..2dea9d0 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
 return array(
-    'Custom\Model\entity' => __DIR__ . '/Model/Entity.php',
+    'Custom\Model\Entity' => __DIR__ . '/Model/Entity.php',
+    'Custom\Model\Manager' => __DIR__ . '/Model/Manager.php',
 );