Dieser Beitrag beschreibt kurz und knapp, wie meine Typesafe Enum-Klasse zusammen mit dem ORM Propel funktioniert. Mehr über Typesafe Enum und Enumerations in PHP finden Sie hier: Typesafe Enum
Use case:
Typesafe Enum datatypes in propel objects, mapped to SQL ENUM type.
Example in Propel (schema.xml):
<column name="title_casus" sqlType="ENUM('N','M','F')" phpType="Casus" required="false" description="Kasus"/>
Example Enum Type:
Enum::define('CasusEnum', 'N','M','F');
Required Data Wrapper:
/** * Wrapper class that allows multiple instances, needed by propel * * @author Fabian Schmengler <fschmengler@sgh-it.eu> * @copyright © 2010 SGH informationstechnologie UG */ class Casus { private $casusEnum; public function __construct($casusString) { if (method_exists('CasusEnum', $casusString)) { $this->casusEnum = call_user_func(array('CasusEnum', $casusString)); } else { $this->casusEnum = null; } } public function __tostring() { return (string)$this->casusEnum; } public static function __set_state(array $properties) { return (string)$properties['casusEnum']; } }
Note to myself: diese Wrapper-Geschichte könnte noch ausgebaut werden, so etwas wie Enum::getInstance($string) wollte ich eh mal in TypesafeEnum integrieren, warum nicht auch gleich einen mit-generierten Wrapper (der natürlich auch noch eine getEnum() Methode bekommt)