<?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()