unclecheese / mock-dataobjects
允许DataObjects使用假数据智能自填充
Requires
- fzaninotto/faker: 1.1.*@dev
- silverstripe/cms: ~3.1
- silverstripe/framework: ~3.1
Replaces
- silverstripe/mock-dataobjects: *
README
本模块为所有DataObjects提供智能内容生成功能。该对象会检查其字段并根据字段类型和字段名称分配示例值。它还提供命令行工具以程序化生成模拟数据,并在CMS中提供各种UI功能以支持创建和填充DataObjects。
安装
由于该模块有外部依赖项,强烈推荐使用Composer进行安装。
composer require unclecheese/mock-dataobjects:dev-master
示例
class StaffMember extends DataObject { private static $db = array ( 'FirstName' => 'Varchar(255)', 'LastName' => 'Varchar(255)', 'EmailAddress' => 'Varchar(255)', 'Address' => 'Varchar(255)', 'City' => 'Varchar(255)', 'PostalCode' => 'Varchar(255)', 'Country' => 'Varchar(255)', 'Company' => 'Varchar(255)', 'Website' => 'Varchar(255)', 'PhoneNumber' => 'Varchar(255)', ); private static $has_one = array ( 'Photo' => 'Image', 'StaffHolder' => 'StaffHolder', ); }
$staff = new StaffMember(); $staff->fill();
结果
实现
您可以通过多种方式使用MockDataObjects模块的功能,包括可执行代码、命令行界面以及CMS内部。
CMS内使用
向父页面添加模拟子项
在父页面上右键单击并选择“添加模拟子项”。
选择选项并创建
向网格添加项目
只需单击“添加模拟数据”并设置选项。
填充现有记录
单击“用模拟数据填充”
在执行管道中
$myDataObject->fill();
如上所示,->fill()方法使用模拟数据填充DataObject。您可以向此方法传递一些选项。
$myDataObject->fill(array( 'only_empty' => true, // only fill in empty fields 'include_relations' => true, // Include has_many and many_many relations 'relation_create_limit' => 5, // If no existing records for many_many or has_one relations, limit creation 'download_images' => false, // Don't download images from the web. Use existing. ));
从命令行
创建50条新记录。使用现有文件进行文件关系。
mockdata generate Product -count 50 --no-downloads
使用新数据填充现有记录。
mockdata populate Product
向给定页面的has_many关系添加新记录。
mockdata generate StaffMember -parent-field StaffPageID -parent "our-staff"
本地化
模拟数据值根据i18n::get_locale()
定义的当前区域设置进行本地化。
i18n::set_locale('en_US'); $staff = new StaffMember(); $staff->fill(); echo $staff->PhoneNumber; // (102) 806-3915 i18n::set_locale('fr_FR'); $staff = new StaffMember(); $staff->fill(); echo $staff->PhoneNumber; // +33 8 17 54 64 62
字段名称钩子
对于通用的数据库字段,例如Varchar,模拟数据生成器会根据字段名称来创建更真实的数据。这些钩子在语言文件中定义。
en:
MockDataObject:
FIRSTNAME: "Firstname, FirstName"
LASTNAME: "Surname, LastName, Lastname"
FULLNAME: "FullName"
CITY: "City, Town"
STATE: "State"
ADDRESS: "Address, Address1, Address2"
POSTCODE: "Zip, Zipcode, ZipCode"
COUNTRYCODE: "Country, CountryCode"
PHONENUMBER: "Phone, PhoneNumber, Fax, Cell, Mobile, Telephone, Phonenumber"
EMAIL: "Email, EmailAddress"
COMPANY: "Company, CompanyName, Organization"
URL: "URL, Website, URI"
LATITUDE: "Latitude, Lat"
LONGITUDE: "Longitude, Lon"
可能的字段名称列表以逗号分隔,并映射到一个实体,例如名为"EmailAddress"或"Email"的字段创建一个假电子邮件地址,而"Phone"或"Telephone"创建一个假电话号码。
一个可能的法语语言文件示例可能如下所示
fr:
MockDataObject:
FIRSTNAME: "Prenom"
LASTNAME: "NomDeFamille, Nom"
CITY: "Ville"
与模型无关的数据生成
有时在模型创建之前生成模拟数据是有用的,例如在前端开发在进行后台开发之前。为此,每个DataObject都附带一个$Fake
方法来访问假数据生成器。
<h2>$Fake.Words</h2> $Fake.Paragraphs(2,5) <!-- min, max --> $Fake.Image.SetWidth(100) <h3>What we can do for you</h3> <ul> <% loop $Fake.Loop %> <li>$Fake.Number $Fake.Words</li> <% end_loop %> </ul> <h3>Contact Us</h3> $Fake.Company<br /> $Fake.FullName<br /> $Fake.Address<br /> $Fake.Address<br /> $Fake.City, $Fake.State $Fake.PostalCode<br /> $Fake.PhoneNumber<br /> <a href="mailto:$Fake.Email">$Fake.Email</a> <h3>Find us on a map!</h3> $Fake.Latitude, $Fake.Longitude
清理
所有模拟数据创建的记录都存储在MockDataLog
表中,该表将记录ID映射到类名。您可以使用任务dev/tasks/MockDataTask cleanup <classname>
清理此表。要清除所有模拟数据,请将类名参数留空。
在将模拟数据记录转换为真实记录时要非常小心,因为此任务将在不知道您已填充有效数据的情况下清理它们!
故障排除
只需给Uncle Cheese打电话。