Что мне всегда отдельно нравилось в Ларавеле — так это как там организована генерация тестовых материалов. Для этого используется мега-библиотека Faker, которая умеет практически всё, что может понадобиться при разработке. Годится как для автоматизированных тестов, так и для заполнения БД тестовыми данными.
В самом Ларавеле можно описать для моделей классы-factory и генерировать данные по ним, это описано в документации. В OctoberCMS про фабрики документация ничего не говорит, но можно обойтись и без них:
// Делаем класс-сидер, кладем его в /updates нашего плагина
<?php namespace Graker\Myplugin\Updates;
use Faker\Factory;
use October\Rain\Database\Updates\Seeder;
// а это классы моделей, которые мы будем генерировать:
use Graker\Touristic\Models\TourInfo;
use System\Models\File;
use RainLab\Blog\Models\Post;
use RainLab\Blog\Models\Category;
class SeedAllTables extends Seeder
{
public function run()
{
// здесь будем генерировать тестовый контент
}
}
Теперь воспользуемся библиотекой Faker и сгенерируем запись в блог:
public function run()
{
$factory = Factory::create();
$post = Post::create([
'title' => $factory->words(4, TRUE),
'slug' => $factory->slug(),
'content' => $factory->realText(450),
'excerpt' => $factory->realText(120),
'published_at' => $factory->date(),
'published' => true,
]);
}
Сгенерируется заголовок, slug для пути, текст, анонс, дата публикации. Параметрами генерации (длиной текстов, ограничениями дат) можно легко управлять.
Создадим категорию и добавим её нашему посту:
public function run()
{
//...
// в качестве категории используем название случайной страны
$country = Category::create([
'name' => $factory->country,
'slug' => $factory->slug(3),
'description' => $factory->paragraph(),
]);
$post->categories()->attach($country->id);
}
Добавим посту картинку:
public function run()
{
// ...
$post->featured_images()->save(File::create([
'data' => $factory->image(),
'is_public' => TRUE,
]));
}
Картинки будут использованы живые, с сервиса Lorempixel, а не разукрашенные геометрические формы. Через аргументы функции можно управлять разрешением картинки и даже выбирать категорию. Например, выводить только котиков.
Ну и сгенерируем данные своей кастомной модели, прикрепленной к посту через extend()
:
public function run()
{
// ...
// это просто для примера, какие еще можно генерировать значения
TourInfo::create([
'stars' => $factory->numberBetween(1, 5),
'price' => $factory->numberBetween(100, 100000),
'currency' => TourInfo::$currencies[$factory->numberBetween(0, 2)],
'tours_quantity' => $factory->numberBetween(1, 100),
'starts_at' => $factory->date('Y-m-d', '+1 year'),
'nights' => $factory->numberBetween(1, 60),
'post_id' => $post->id,
]);
}
Вот так, легко и просто генерируются данные. Кстати, если вам нужно генерировать тестовые данные не в БД, а прямо в вёрстке странцы, есть плагин Faker — как раз для этого. Сделан он на базе той же библиотеки Faker, там функции генератора вызываются прямо из шаблонов Twig.
P.S. А если вам надоели разукрашенные геометрические формы, генерируемые Devel Generate в Друпале, то есть — если вдруг кто не знает — модуль Realistic Dummy Content.