كيفية جعل مذهب حذف بادئة الجدول من أسماء الصف؟
سؤال
وأنا باستخدام عقيدة 1.1.5 وأود أن أعرف إذا كان هناك بعض خيار لإزالة الجدول بادئة من الملفات وأسماء فئة عند استدعاء <م> العقيدة :: generateModelsFromDb م> أو <م> العقيدة :: generateModelsFromYaml م>.
وتحرير: على سبيل المثال لدي الجداول مثل mo_article، mo_language، mo_article_text، وما إلى ذلك عندما يولد عقيدة النماذج (باستخدام وظائف من فوق)، وأسماء الطبقة يكون MoArticle، MoLanguage، MoArticleText، ... ولكن أريد لها أن تكون المادة، اللغة ، ArticleText ... هل هناك خيار في تلك الوظائف لتجنب إضافة بادئة الجدول في أسماء فئة النموذج؟
وشكرا
المحلول
وكان لي نفس هذا السيناريو بالضبط وانتهى كتابة وظيفة بلدي من أجل حلها. هذه الوظيفة يمر عبر ملف YAML بلدي، يقرأ كل اسم الجدول، ويضيف دخول className:
المناسب دون بادئة الجدول.
إليك وظيفة:
const TABLE_PFX = 'tableName:';
const CLASS_PFX = 'className:';
function AddClassNames($yamlPath) {
$tempFilePath = $yamlPath . '.old';
rename($yamlPath, $tempFilePath);
$tempFile = fopen($tempFilePath, 'r');
$yamlFile = fopen($yamlPath, 'w');
while (!feof($tempFile)) {
$line = fgets($tempFile);
fwrite($yamlFile, $line);
if ($index = strpos($line, TABLE_PFX)) {
$tableName = trim(substr($line, $index + strlen(TABLE_PFX) + 1));
$className = substr($tableName, 4);
$className = strtocamel($className);
$classLine = str_replace(TABLE_PFX, CLASS_PFX, $line);
$classLine = str_replace($tableName, $className, $classLine);
fwrite($yamlFile, $classLine);
}
}
fclose($tempFile);
fclose($yamlFile);
unlink($tempFilePath);
}
وهنا كيف لي استخدامه:
Doctrine_Core::generateYamlFromDb($yamlPath);
AddClassNames($yamlPath);
Doctrine_Core::generateModelsFromYaml($yamlPath, 'models',
array('doctrine'),
array('generateTableClasses' => true,));
واحد مزيد من ملاحظة - مع هذا الأسلوب لم يكن لديك متسع من مذهب تحويل database_table_name
الخاص بك إلى ClassName
سهل PHP، ولذلك عليك أن تفعل هذا بنفسك. لقد استخدمت وظيفة strtocamel
من هنا .
نصائح أخرى
وأضيف
className: CorrectName
وعلى كل تعريف الجدول كنت بحاجة إلى تغيير في ملف schema.yml الخاص بك. سوف عقيدة تولد كل الملفات مع نمط CorrectName ولكن لا تزال القراءة / الكتابة من جدول محدد مسبقا لديك.