unclecheese/mock-dataobjects

允许DataObjects使用假数据智能自填充

1.1.0 2017-09-04 12:05 UTC

This package is auto-updated.

Last update: 2024-08-29 03:27:11 UTC


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();

结果

Screenshot

实现

您可以通过多种方式使用MockDataObjects模块的功能,包括可执行代码、命令行界面以及CMS内部。

CMS内使用

向父页面添加模拟子项

在父页面上右键单击并选择“添加模拟子项”。

Screenshot

选择选项并创建

Screenshot

向网格添加项目

只需单击“添加模拟数据”并设置选项。

Screenshot

填充现有记录

单击“用模拟数据填充”

Screenshot

在执行管道中

$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打电话。