3

RedBeanPHPは、クラスの命名規則を使用してモデルをテーブルに関連付けます。テーブル名が固まっていないプロジェクトがあるので、その命名規則に従うことはできません。RedBean_SimpleModel命名規則なしでテーブル名に接続する方法が必要です-どうすればよいですか?

4

1 に答える 1

6

OK、APIドキュメントを調べているときに1つの解決策を見つけました。独自の「モデルフォーマッタ」を設定できます。つまり、テーブルの名前とクラスの名前を接続する責任を与えられたクラスを作成できます。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);

そのため、しばらくの間、これを正解としてマークすることは控えます。

于 2012-04-13T14:28:07.180 に答える