Install the Bundle
composer require hautelook/alice-bundle
Ensure Hautelook\AliceBundle\HautelookAliceBundle::class is registered in config/bundles.php.
Configure Database Support
Add Fidry\AliceDataFixtures\Bridge\Doctrine\ORM\AliceDataFixturesLoader to your doctrine/orm/fixtures.yaml:
services:
Fidry\AliceDataFixtures\Bridge\Doctrine\ORM\AliceDataFixturesLoader:
arguments:
$entityManager: '@doctrine.orm.entity_manager'
Create Your First Fixture
Define a fixture in src/DataFixtures/ORM/LoadUserData.php:
use Hautelook\AliceBundle\Fixtures\Loader;
use Hautelook\AliceBundle\Fixtures\DataFixturesProviderInterface;
class LoadUserData implements DataFixturesProviderInterface
{
public function getFixtures(): array
{
return [
__DIR__.'/user.yml',
];
}
}
Define Fixture Data (user.yml)
App\Entity\User:
user_{1..10}:
email: '<email>'
roles: ['ROLE_USER']
plainPassword: 'password'
Load Fixtures
php bin/console hautelook:fixtures:load
Or via PHP:
$loader = new Loader();
$loader->load();
Organize Fixtures by Domain
Group fixtures in directories (e.g., src/DataFixtures/ORM/Users/, src/DataFixtures/ORM/Products/).
Use DataFixturesProviderInterface to aggregate them:
class LoadUserFixtures implements DataFixturesProviderInterface
{
public function getFixtures(): array
{
return [
__DIR__.'/users/*.yml',
];
}
}
Reuse Fixtures with Parameters
Pass runtime parameters via Loader:
$loader = new Loader();
$loader->load([], ['environment' => 'test']);
Access in YAML:
App\Entity\User:
user_{1..5}:
email: '<email>@{{ environment }}.com'
Dependency-Based Loading
Use orderBy: [ { property: 'createdAt', direction: 'ASC' } ] in hautelook_alice.yaml to enforce load order:
hautelook_alice:
fixtures:
order_by: true
Custom Fixture Classes
Extend Hautelook\AliceBundle\Fixtures\AbstractFixture for dynamic logic:
class CustomUserFixture extends AbstractFixture
{
protected function getObjects(): array
{
return [
new User('admin@example.com', 'admin'),
];
}
}
Symfony Events Trigger fixture loading post-migration:
# config/packages/doctrine.yaml
doctrine:
orm:
event_listeners:
Hautelook\AliceBundle\EventListener\FixturesListener: ~
Testing
Use Hautelook\AliceBundle\Test\FixturesTrait in PHPUnit:
use Hautelook\AliceBundle\Test\FixturesTrait;
class UserTest extends TestCase
{
use FixturesTrait;
protected function setUp(): void
{
$this->loadFixtures([LoadUserData::class]);
}
}
Environment-Specific Fixtures
Override fixtures per environment via hautelook_alice.yaml:
hautelook_alice:
fixtures:
test:
path: '%kernel.project_dir%/config/fixtures/test'
Database Compatibility
Circular References
order_by in config or use after/before in YAML:
App\Entity\Order:
order_1:
user: '@user_1'
after: ['App\Entity\User']
Faker Locale Mismatch
Faker\Factory is configured:
Faker\Factory::create('en_US');
Doctrine Proxy Conflicts
config/packages/dev/doctrine.yaml:
doctrine:
orm:
proxy_dir: null
proxy_namespace: null
Dry Run Mode
Use --dry-run to preview loaded data:
php bin/console hautelook:fixtures:load --dry-run
Verbose Output Enable debug mode for detailed logs:
php bin/console hautelook:fixtures:load -vvv
Fixture Validation Validate YAML syntax with:
php bin/console hautelook:fixtures:validate
Custom Faker Providers
Register providers in services.yaml:
services:
App\Fixtures\CustomFakerProvider:
tags: [faker.provider]
Post-Load Callbacks Use Symfony events to run logic after loading:
// src/EventListener/FixturePostLoadListener.php
class FixturePostLoadListener
{
public function onFixturesLoaded(FixturesLoadedEvent $event)
{
// Custom logic here
}
}
Dynamic Fixture Generation
Override Hautelook\AliceBundle\Fixtures\Loader to inject runtime data:
$loader = new class($container) extends Loader {
public function __construct(private ContainerInterface $container) {}
protected function getParameters(): array {
return ['app_name' => $this->container->getParameter('app.name')];
}
};
Default Namespace
Fixtures default to App\Entity\. Override in hautelook_alice.yaml:
hautelook_alice:
namespace: 'Your\Custom\Namespace'
Excluding Fixtures
Use exclude in DataFixturesProviderInterface:
public function getFixtures(): array
{
return [
__DIR__.'/users/*.yml',
];
}
// Exclude specific files via CLI:
php bin/console hautelook:fixtures:load --exclude=admin.yml
Performance
purge_mode in hautelook_alice.yaml for large datasets:
hautelook_alice:
purge_mode: false
--no-purge flag to skip truncation:
php bin/console hautelook:fixtures:load --no-purge
How can I help you explore Laravel packages today?