Commit 392683e1 authored by amadeus's avatar amadeus

Added Doctrine::tableize(), Doctrine::classify() and...

Added Doctrine::tableize(), Doctrine::classify() and DataDict::isValidClassname() for proper table naming. Fixed Table() to accept these (more need to be changed such as rawsql).Also fixed unbind method (missing argument)
parent b887ca94
...@@ -420,5 +420,23 @@ class DQLException extends Exception { } ...@@ -420,5 +420,23 @@ class DQLException extends Exception { }
require_once($class); require_once($class);
return true; return true;
} }
/**
* returns table name from class name
*
* @param string $classname
* @return string
*/
public static function tableize($classname) {
return strtolower(preg_replace('~(?<=\\w)([A-Z])~', '_$1', $classname));
}
/**
* returns class name from table name
*
* @param string $tablename
* @return string
*/
public static function classify($tablename) {
return preg_replace('~(_?)(_)([\w])~e', '"$1".strtoupper($3)', ucfirst($tablename));
}
} }
?> ?>
...@@ -109,5 +109,16 @@ class Doctrine_DataDict { ...@@ -109,5 +109,16 @@ class Doctrine_DataDict {
throw new Doctrine_Exception("Unknown column type $type"); throw new Doctrine_Exception("Unknown column type $type");
endswitch; endswitch;
} }
/**
* checks for valid class name (uses camel case and underscores)
*
* @param string $classname
* @return boolean
*/
public static function isValidClassname($classname) {
if(preg_match('~(^[a-z])|(_[a-z])|([\W])|(_{2})~', $classname))
throw new Doctrine_Exception("Class name is not valid. use camel case and underscores (i.e My_PerfectClass).");
return true;
}
} }
?> ?>
...@@ -154,7 +154,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable { ...@@ -154,7 +154,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable {
$class = $method->getDeclaringClass(); $class = $method->getDeclaringClass();
if( ! isset($this->tableName)) if( ! isset($this->tableName))
$this->tableName = strtolower($class->getName()); $this->tableName = Doctrine::tableize($class->getName());
switch(count($this->primaryKeys)): switch(count($this->primaryKeys)):
case 0: case 0:
...@@ -205,7 +205,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable { ...@@ -205,7 +205,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable {
} }
endswitch; endswitch;
if($this->getAttribute(Doctrine::ATTR_CREATE_TABLES)) { if(Doctrine_DataDict::isValidClassname($class->getName()) && $this->getAttribute(Doctrine::ATTR_CREATE_TABLES)) {
$dict = new Doctrine_DataDict($this->getSession()->getDBH()); $dict = new Doctrine_DataDict($this->getSession()->getDBH());
$dict->createTable($this->tableName, $this->columns); $dict->createTable($this->tableName, $this->columns);
} }
...@@ -456,7 +456,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable { ...@@ -456,7 +456,7 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable {
* @param $name * @param $name
* @return boolean * @return boolean
*/ */
final public function unbind() { final public function unbind($name) {
if( ! isset($this->bound[$name])) if( ! isset($this->bound[$name]))
return false; return false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment