2012-04-13 1 views
3

RedBeanPHP uses class naming convention привязать модель к столу. Я не могу придерживаться этого соглашения об именах, так как у меня есть проект, в котором имена таблиц не заданы. Мне нужен способ подключения RedBean_SimpleModel к имени таблицы без соглашения об именах - Как это сделать?Любые альтернативы Соглашению об именовании модели RedBean/Fuse?

ответ

6

ОК, я нашел одно решение, проходя через API documentation. Я могу установить свой собственный «Model Formatter», что означает, что я могу создать класс, которому поручено связывать имя таблицы с именем класса. Мой код настройки RedBean теперь выглядит так:

# Redbean 
require('vendor/redbean/rb.php'); 

R::setup("mysql:host=".MYSQL_HOST.";dbname=".MYSQL_DATABASE.";", 
     MYSQL_USERNAME, MYSQL_PASSWORD); 

# Set custom model formatter 
class CustomRedBeanModelFormatter implements RedBean_IModelFormatter 
{ 
    public function formatModel($model) 
    { 
     switch($model) 
     { 
      case foo\bar\OmniDataManager::TABLE_DATA: 
       return 'foo\bar\OmniDataModel'; 
      case foo\bar\OmniDataManager::TABLE_GROUP: 
       return 'foo\bar\OmniDataGroupModel'; 
      default: 
       return false; 
     } 
    } 
} 
$customRedBeanModelFormatter = new CustomRedBeanModelFormatter(); 
RedBean_ModelHelper::setModelFormatter($customRedBeanModelFormatter); 

Это немного уродливое решение. Я предпочел бы быть в состоянии сделать что-то вроде этого:

RedBean_ModelHelper::setModelForTable($modelName, $tableName); 

По этой причине я повременить маркировки это как правильный ответ на какое-то время.