RedBean/Fuse 模型命名约定的任何替代方案


Any alternatives to the RedBean/Fuse Model naming convention?

RedBeanPHP 使用类命名约定将模型绑定到表。我不能遵守这种命名约定,因为我有一个项目,其中表名不是一成不变的。我需要一种方法在没有命名约定的情况下将RedBean_SimpleModel连接到表名 - 我该怎么做?

好的,我在浏览 API 文档时找到了一个解决方案。我可以设置自己的"模型格式化程序",这仅意味着我可以创建一个类,该类负责将表的名称与类的名称连接起来。我的 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);

出于这个原因,我将暂时推迟将其标记为正确答案。