Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Fixturesbundle Laravel Package

cekurte/fixturesbundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Steps

  1. Installation Add the bundle to your composer.json:

    composer require cekurte/fixturesbundle
    

    Enable it in config/bundles.php:

    return [
        // ...
        Cekurte\FixturesBundle\CekurteFixturesBundle::class => ['all' => true],
    ];
    
  2. Basic Configuration Ensure doctrine:fixtures:load is available by running:

    php bin/console doctrine:fixtures:load
    

    (Requires DoctrineFixturesBundle; install via composer require orm-fixtures if missing.)

  3. First Fixture File Create a YAML fixture file (e.g., src/DataFixtures/ORM/LoadUserData.yml):

    App\Entity\User:
      user1:
        email: 'test@example.com'
        password: '$2y$10$...' # Use a hashed password
        roles: ['ROLE_USER']
    
  4. Load Fixtures Run:

    php bin/console doctrine:fixtures:load
    

    Verify data in the database.


Where to Look First

  • Documentation: GitHub Docs
  • Example Fixtures: Check src/DataFixtures/ORM/ for template files.
  • Bundle Config: config/packages/cekurte_fixtures.yaml (if created).

First Use Case: Seeding Default Data

Use the bundle to populate a database with default records (e.g., users, roles, or test data) during development or testing. Example:

# src/DataFixtures/ORM/LoadDefaultRoles.yml
App\Entity\Role:
  admin:
    name: 'ROLE_ADMIN'
    description: 'Administrator role'
  user:
    name: 'ROLE_USER'
    description: 'Regular user role'

Implementation Patterns

Workflows

  1. Development Workflow

    • Create fixtures in src/DataFixtures/ORM/ (e.g., LoadUsers.yml, LoadProducts.yml).
    • Use references to link entities (e.g., assign a user to an order):
      App\Entity\Order:
        order1:
          user: '@user1' # Reference to user1 from LoadUsers.yml
          total: 99.99
      
    • Load fixtures with:
      php bin/console doctrine:fixtures:load --append  # Append to existing data
      
  2. Testing Workflow

    • Use --purge-with-truncate to reset the database before tests:
      php bin/console doctrine:fixtures:load --purge-with-truncate
      
    • Combine with PHPUnit for test suites:
      // phpunit.xml
      <env name="DATABASE_URL" value="sqlite:///:memory:" />
      
  3. Environment-Specific Fixtures

    • Organize fixtures by environment (e.g., dev/, test/ directories).
    • Override the fixture directory in config/packages/cekurte_fixtures.yaml:
      cekurte_fixtures:
          directories: ['%kernel.project_dir%/config/fixtures/%env(APP_ENV)%']
      

Integration Tips

  1. Custom Fixture Classes Extend Cekurte\FixturesBundle\Fixtures\AbstractFixture for dynamic data:

    namespace App\DataFixtures\ORM;
    
    use Cekurte\FixturesBundle\Fixtures\AbstractFixture;
    use Doctrine\Common\DataFixtures\DependentFixtureInterface;
    
    class LoadDynamicUsers extends AbstractFixture implements DependentFixtureInterface
    {
        public function load(ObjectManager $manager)
        {
            $users = ['alice@example.com', 'bob@example.com'];
            foreach ($users as $email) {
                $user = new \App\Entity\User();
                $user->setEmail($email);
                $manager->persist($user);
            }
            $manager->flush();
        }
    
        public function getDependencies()
        {
            return [LoadDefaultRoles::class];
        }
    }
    
  2. Dependencies Between Fixtures Use DependentFixtureInterface to enforce load order:

    # LoadUsers.yml
    App\Entity\User:
      user1:
        email: 'test@example.com'
    
    # LoadOrders.yml
    App\Entity\Order:
      order1:
        user: '@user1' # Requires LoadUsers.yml to run first
    
  3. Parameterized Fixtures Use Symfony parameters (e.g., APP_ENV) to conditionally load data:

    # config/packages/cekurte_fixtures.yaml
    cekurte_fixtures:
        enabled: '%env(bool:APP_LOAD_FIXTURES)%'
    
    # LoadDevOnlyData.yml
    App\Entity\DevOnlyEntity:
      dev_data:
        value: 'Only loaded in dev'
    

Gotchas and Tips

Pitfalls

  1. Missing DoctrineFixturesBundle

    • Error: Command "doctrine:fixtures:load" not found.
    • Fix: Install orm-fixtures:
      composer require orm-fixtures
      
  2. Circular References

    • Error: Fixtures fail due to circular references (e.g., User references Order, which references User).
    • Fix: Use setReference() in custom fixtures or restructure data.
  3. Database State Conflicts

    • Error: Fixtures fail because data already exists (e.g., unique constraints).
    • Fix: Use --append or --purge-with-truncate:
      php bin/console doctrine:fixtures:load --append
      
  4. Locale/Encoding Issues

    • Error: YAML parsing fails due to special characters (e.g., accents, emojis).
    • Fix: Use UTF-8 encoding in fixture files and ensure your editor saves as UTF-8.

Debugging

  1. Enable Debug Mode Set APP_DEBUG=1 in .env to see detailed fixture load logs.

  2. Check Load Order Use getDependencies() in custom fixtures to enforce order:

    public function getDependencies()
    {
        return [LoadRoles::class, LoadUsers::class];
    }
    
  3. Validate Fixtures Run with --dry-run to preview changes:

    php bin/console doctrine:fixtures:load --dry-run
    
  4. Clear Cache After modifying fixtures or bundle config, clear the cache:

    php bin/console cache:clear
    

Config Quirks

  1. Custom Fixture Directories Override the default src/DataFixtures/ORM/ path in config:

    cekurte_fixtures:
        directories: ['%kernel.project_dir%/data/fixtures']
    
  2. Excluding Fixtures Use a ~ prefix in fixture filenames to exclude them (e.g., LoadDisabledData~.yml).

  3. Environment-Specific Config Load different fixtures per environment via config/packages/cekurte_fixtures_{env}.yaml.


Extension Points

  1. Custom Fixture Loader Extend Cekurte\FixturesBundle\Loader\FixturesLoader to add pre/post-load logic:

    namespace App\Fixtures;
    
    use Cekurte\FixturesBundle\Loader\FixturesLoader;
    
    class CustomFixturesLoader extends FixturesLoader
    {
        protected function preLoad()
        {
            // Custom logic before loading
        }
    
        protected function postLoad()
        {
            // Custom logic after loading
        }
    }
    

    Register in config/services.yaml:

    services:
        App\Fixtures\CustomFixturesLoader:
            decorates: 'cekurte_fixtures.loader'
            arguments: ['@.inner']
    
  2. Event Listeners Subscribe to fixtures.load events for dynamic behavior:

    namespace App\EventListener;
    
    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
    use Cekurte\FixturesBundle\Event\FixturesEvent;
    
    class FixtureSubscriber implements EventSubscriberInterface
    {
        public static function getSubscribedEvents()
        {
            return [
                'fixtures.load' => 'onFixturesLoad',
            ];
        }
    
        public function onFixturesLoad(FixturesEvent $event)
        {
            // Modify fixtures dynamically
        }
    }
    
  3. Custom Data Transformers Override how data is loaded by extending Cekurte\FixturesBundle\Transformer\DataTransformer.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
supportpal/coding-standard
act-training/query-builder
labrodev/php-mixed-converter
nebo15/lumen.rest
nqxcode/lucene-stemmer-en-ru
nqxcode/zendsearch
erlandmuchasaj/laravel-gzip
iio/libmergepdf
redaxo/project
zatona-eg/zatona-eg-api
patrickbussmann/oauth2-apple
3brs/enterprise-security-bundle
ardenexal/fhir-models
ardenexal/fhir-validation
dpfx/laravel-livewire-wizards
dmstr/symfony-system-resources-bundle
dmstr/symfony-job-queue-bundle
dmstr/openapi-json-schema-bundle
dmstr/keycloak-security-bundle
dmstr/doctrine-audit-log-bundle