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

Acme Pizza Laravel Package

beberlei/acme-pizza

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    • Add the bundle via Composer (though the README uses Git, prefer composer require beberlei/acme-pizza if available).
    • Register in config/bundles.php (Symfony 4+) or AppKernel.php (Symfony 3):
      Acme\PizzaBundle\AcmePizzaBundle::class => ['all' => true],
      
    • Enable routing in config/routes.yaml:
      acme_pizza:
          resource: "@AcmePizzaBundle/Resources/config/routing.yml"
      
  2. Database:

    • Run migrations (if using Doctrine Migrations):
      php bin/console doctrine:migrations:diff
      php bin/console doctrine:migrations:migrate
      
    • Fallback to schema creation (if no migrations exist):
      php bin/console doctrine:schema:update --force
      
  3. First Use Case:

    • Test the bundle’s demo form by visiting /pizza/order (or the configured route).
    • Inspect the generated form in src/Acme/PizzaBundle/Resources/views/Order/form.html.twig.

Implementation Patterns

Core Workflows

  1. Form Integration:

    • Extend the bundle’s OrderType (e.g., src/Form/ExtendedOrderType.php) to customize fields:
      use Acme\PizzaBundle\Form\OrderType as BaseOrderType;
      class ExtendedOrderType extends BaseOrderType {
          public function buildForm(FormBuilderInterface $builder, array $options) {
              $builder->add('custom_field', TextType::class);
          }
      }
      
    • Override the form theme in config/packages/twig.yaml:
      twig:
          form_themes: ['@AcmePizzaBundle/Form/fields.html.twig']
      
  2. Entity Customization:

    • Extend the Order entity (e.g., src/Entity/OrderExtension.php) to add fields:
      use Acme\PizzaBundle\Entity\Order as BaseOrder;
      class OrderExtension extends BaseOrder {
          /**
           * @ORM\Column(type="string")
           */
          private $customField;
      }
      
    • Update the bundle’s Order entity mapping (if needed) via Doctrine event listeners.
  3. Service Extension:

    • Override the OrderService (e.g., src/Service/CustomOrderService.php):
      use Acme\PizzaBundle\Service\OrderService as BaseOrderService;
      class CustomOrderService extends BaseOrderService {
          public function calculateTotal(array $orderData) {
              // Custom logic
              return parent::calculateTotal($orderData) * 1.1; // Example
          }
      }
      
    • Bind the service in config/services.yaml:
      services:
          Acme\PizzaBundle\Service\OrderService: '@App\Service\CustomOrderService'
      
  4. Event Listeners:

    • Subscribe to bundle events (e.g., OrderCreatedEvent) in config/services.yaml:
      services:
          App\EventListener\OrderListener:
              tags:
                  - { name: 'kernel.event_listener', event: 'acme.pizza.order.created', method: 'onOrderCreated' }
      

Gotchas and Tips

Pitfalls

  1. Namespace Collisions:

    • The bundle’s Acme\PizzaBundle namespace may conflict with your project’s Acme namespace. Use aliases in config/autoload.php:
      $loader->registerPrefixes(array(
          'Acme\\' => __DIR__.'/../vendor/beberlei/acme-pizza/src',
      ));
      
  2. Form Theme Overrides:

    • If extending the form theme, ensure your template extends the base template:
      {# src/Resources/views/Form/fields.html.twig #}
      {% extends '@AcmePizza/Form/fields.html.twig' %}
      
    • Clear the cache after changes:
      php bin/console cache:clear
      
  3. Database Schema Conflicts:

    • The bundle’s schema may not align with your project’s needs. Use Doctrine’s EventSubscriber to modify queries:
      use Doctrine\ORM\Events;
      class CustomSchemaSubscriber implements EventSubscriber {
          public function getSubscribedEvents() {
              return [Events::loadClassMetadata];
          }
          public function loadClassMetadata(EventArgs $args) {
              $metadata = $args->getClassMetadata();
              if ($metadata->getReflectionClass()->getNamespace() === 'Acme\PizzaBundle\Entity') {
                  $metadata->mapField(array(
                      'fieldName' => 'custom_field',
                      'type' => 'string',
                  ));
              }
          }
      }
      
  4. Deprecated Symfony Features:

    • The bundle assumes Symfony 3.x conventions (e.g., app/console). For Symfony 4/5:
      • Replace app/console with bin/console.
      • Move config files from app/config/ to config/.

Debugging Tips

  1. Enable Debug Mode:

    • Set APP_ENV=dev in .env and enable debug toolbar for form/route issues.
  2. Log Events:

    • Subscribe to debug events in config/services.yaml:
      services:
          App\EventListener\DebugListener:
              tags:
                  - { name: 'kernel.event_listener', event: 'acme.pizza.order.*', method: 'logEvent' }
      
  3. Check Routes:

    • Dump routes to verify registration:
      php bin/console debug:router | grep acme_pizza
      

Extension Points

  1. Custom Controllers:

    • Override the bundle’s controller (e.g., src/Controller/PizzaController.php):
      use Acme\PizzaBundle\Controller\OrderController as BaseOrderController;
      class PizzaController extends BaseOrderController {
          public function orderAction() {
              // Custom logic
              return parent::orderAction();
          }
      }
      
    • Update routing in config/routes.yaml:
      acme_pizza:
          resource: "@App\Controller/PizzaController::order"
      
  2. Fixtures:

    • Extend the bundle’s fixtures (e.g., src/DataFixtures/OrderFixtures.php):
      use Acme\PizzaBundle\DataFixtures\OrderFixtures as BaseOrderFixtures;
      class OrderFixtures extends BaseOrderFixtures {
          public function load(ObjectManager $manager) {
              parent::load($manager);
              $manager->persist($this->createCustomOrder());
          }
      }
      
    • Load fixtures with:
      php bin/console doctrine:fixtures:load
      
  3. Validation:

    • Add custom constraints to the Order entity:
      use Symfony\Component\Validator\Constraints as Assert;
      class Order {
          /**
           * @Assert\Length(min=5)
           */
          private $customField;
      }
      
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.
codeflextech/permission-manager
karnoweb/livewire-datepicker
sayedenam/sayed-dashboard
milito/query-filter
apiboxsym/user-bundle
apiboxsym/health-check-bundle
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver