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)