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

Visualize Entity Bundle Laravel Package

adrenalinkin/visualize-entity-bundle

Symfony bundle to visualize entity data using YAML configuration. Define entity classes and fields to display, then build a view object via the linkin_visualize_entity.builder service in controllers. Includes docs and examples for visualize_entity.yml setup.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require adrenalinkin/visualize-entity-bundle
    

    Ensure your project uses Symfony 3.x/4.x (based on AppKernel.php reference).

  2. Enable Bundle Add to app/AppKernel.php (Symfony 3.x) or config/bundles.php (Symfony 4.x+):

    new Linkin\Bundle\VisualizeEntityBundle\LinkinVisualizeEntityBundle(),
    
  3. First Configuration Create a YAML file (e.g., config/packages/linkin_visualize_entity.yaml):

    linkin_visualize_entity:
        acme_user_default:
            className: App\Entity\User
            fields:
                id: ~
                email: ~
                createdAt: { format: "Y-m-d H:i:s" }
    
  4. First Usage Inject the service in a controller/service:

    use Linkin\Bundle\VisualizeEntityBundle\Service\VisualizeEntityService;
    
    public function __construct(private VisualizeEntityService $visualizeService) {}
    
    public function showUser(User $user) {
        $visualized = $this->visualizeService->visualize('acme_user_default', $user);
        return $this->render('user/show.html.twig', ['data' => $visualized]);
    }
    

Implementation Patterns

Common Workflows

1. Dynamic Field Formatting

Use inline formatting in YAML for complex transformations:

fields:
    fullName: { template: "{{ entity.firstName }} {{ entity.lastName }}" }
    status: { formatter: "App\Formatter\StatusFormatter" }

2. Entity Inheritance

Extend base configurations for child entities:

acme_user_admin:
    extends: acme_user_default
    fields:
        roles: ~

3. Twig Integration

Render visualized data directly in templates:

{% for field, value in visualizedData %}
    <tr>
        <th>{{ field }}</th>
        <td>{{ value|raw }}</td>
    </tr>
{% endfor %}

4. API Responses

Use the service to format entity arrays for JSON APIs:

$users = $this->userRepository->findAll();
$visualized = $this->visualizeService->batchVisualize('acme_user_default', $users);
return $this->json($visualized);

5. Event-Driven Visualization

Trigger visualization in event subscribers:

public function onUserCreated(UserCreatedEvent $event) {
    $visualized = $this->visualizeService->visualize('acme_user_default', $event->getUser());
    // Log, notify, or store $visualized
}

Integration Tips

Symfony Forms

Use visualized data to pre-populate forms:

$form = $this->createForm(UserType::class, $user);
$form->add('customData', TextType::class, [
    'data' => $this->visualizeService->visualize('acme_user_default', $user)['customField'] ?? null,
]);

Doctrine Lifecycle Callbacks

Visualize entities before/after flush:

public function prePersist(EntityManagerInterface $em, User $user) {
    $visualized = $this->visualizeService->visualize('acme_user_default', $user);
    // Validate or log $visualized
}

Command-Line Tools

Create custom commands to export visualized data:

$users = $this->userRepository->findBy(['active' => true]);
$visualized = $this->visualizeService->batchVisualize('acme_user_default', $users);
$this->output->writeln(json_encode($visualized));

Gotchas and Tips

Pitfalls

  1. Circular References

    • Issue: Visualizing entities with bidirectional relationships (e.g., User <-> Post) may cause infinite loops.
    • Fix: Use maxDepth in config or implement VisualizeEntityInterface to control traversal:
      acme_user_default:
          maxDepth: 2
      
  2. Missing Dependencies

    • Issue: The bundle requires adrenalinkin/entity-helper-bundle (not explicitly mentioned in README).
    • Fix: Install via Composer:
      composer require adrenalinkin/entity-helper-bundle
      
  3. YAML Parsing Errors

    • Issue: Invalid YAML (e.g., unquoted keys with special chars) throws cryptic errors.
    • Fix: Validate YAML with:
      yaml-lint config/packages/linkin_visualize_entity.yaml
      
  4. Performance with Large Datasets

    • Issue: batchVisualize() may be slow for >1000 entities.
    • Fix: Use chunk() or implement lazy loading:
      $visualized = [];
      foreach ($this->userRepository->findAll() as $user) {
          $visualized[] = $this->visualizeService->visualize('acme_user_default', $user);
      }
      

Debugging Tips

  1. Enable Debug Mode Add to config/packages/dev/linkin_visualize_entity.yaml:

    debug: true
    

    Logs raw visualization data to var/log/dev.log.

  2. Check Configuration Loading Dump loaded configs in a controller:

    dump($this->visualizeService->getConfigManager()->getConfigs());
    
  3. Formatter Errors If a custom formatter fails, check:

    • The service is tagged as linkin.visualize.formatter.
    • The formatter implements Linkin\Bundle\VisualizeEntityBundle\Formatter\FormatterInterface.

Extension Points

  1. Custom Formatters Create a formatter class:

    use Linkin\Bundle\VisualizeEntityBundle\Formatter\FormatterInterface;
    
    class DateRangeFormatter implements FormatterInterface {
        public function format($value, array $options) {
            return date('Y-m-d', strtotime($value)) . ' to ' . date('Y-m-d', strtotime($value) + 86400);
        }
    }
    

    Register as a service:

    services:
        App\Formatter\DateRangeFormatter:
            tags:
                - { name: linkin.visualize.formatter, alias: date_range }
    
  2. Dynamic Config Loading Override ConfigManager to load configs from a database or API:

    $this->visualizeService->setConfigManager(new CustomConfigManager());
    
  3. Twig Extensions Add a Twig function for direct template usage:

    $twig->addFunction(new \Twig\TwigFunction('visualize_entity', [
        $this->visualizeService, 'visualize'
    ]));
    

    Usage in Twig:

    {{ visualize_entity('acme_user_default', user) }}
    
  4. Event Listeners Extend visualization logic via events:

    $dispatcher->addListener(
        Linkin\Bundle\VisualizeEntityBundle\Event\PreVisualizeEvent::class,
        function (PreVisualizeEvent $event) {
            if ($event->getEntity() instanceof User) {
                $event->addData('customField', 'dynamic_value');
            }
        }
    );
    
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.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky