<?php use PHPMICROLIB\Router\Route; require_once Route::getFrontControllerDir() . '/models/customer_pdo.inc.php'; class CustomersController extends \PHPMICROLIB\Router\Controller { private $pdoCustomer; function __construct() { parent::__construct(array('@^customers$@' => 'showCustomers', '@^customers/(?<id>\\d+)$@' => array('get' => 'editCustomer', 'post' => 'updateCustomer'), '@^customers/(?<id>\\d+)\\b@' => function () { self::handleRoute('CustomerOrdersController'); })); $this->pdoCustomer = new PDOCustomer(); } protected function showCustomers() { $customers = array_map(function ($customer) { return $customer->email; }, $this->pdoCustomer->getAll()); die('Customers: ' . implode(', ', $customers)); } protected function editCustomer($args) { die('Edit customer ' . $args['id']); } protected function updateCustomer($args) { die('Update customer ' . $args['id'] . ' from POST!'); } }
<?php use PHPMICROLIB\Database\Crypt; use PHPMICROLIB\Database\PDOModel; use PHPMICROLIB\Router\Route; require_once Route::getFrontControllerDir() . '/../src/crypt.inc.php'; // Properties moeten public zijn! // Want de map functie zet deze. // Ook mooier om hier aparte functies van te maken, zodat de Customer // class lean and mean blijft. Deze maak je namelijk veel vaker en een DB // class heb je maar weinig nodig. Hierdoor blijven de Customer e.d. classes // klein en lichtgewicht. // Nadeel is dat de foreignProperties e.d. niet direct in de class staan // maar in de PDO class... maar eigenlijk is dat goed, want nu is class // helemaal gescheiden van database class. class Customer { public $id; public $username; public $pwd; public $email; public $firstname; public $street; } class PDOCustomer extends PDOmodel { protected $className = 'Customer'; protected $foreignProperties = ['street']; protected $encryptedProperties = ['email']; protected $selectQuery = "SELECT c.*, a.street\n FROM customer AS c\n LEFT JOIN address AS a\n ON a.customer_id = c.id"; public function getAll()