Installation:
composer require beberlei/acme-pizza if available).config/bundles.php (Symfony 4+) or AppKernel.php (Symfony 3):
Acme\PizzaBundle\AcmePizzaBundle::class => ['all' => true],
config/routes.yaml:
acme_pizza:
resource: "@AcmePizzaBundle/Resources/config/routing.yml"
Database:
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
php bin/console doctrine:schema:update --force
First Use Case:
/pizza/order (or the configured route).src/Acme/PizzaBundle/Resources/views/Order/form.html.twig.Form Integration:
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);
}
}
config/packages/twig.yaml:
twig:
form_themes: ['@AcmePizzaBundle/Form/fields.html.twig']
Entity Customization:
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;
}
Order entity mapping (if needed) via Doctrine event listeners.Service Extension:
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
}
}
config/services.yaml:
services:
Acme\PizzaBundle\Service\OrderService: '@App\Service\CustomOrderService'
Event Listeners:
OrderCreatedEvent) in config/services.yaml:
services:
App\EventListener\OrderListener:
tags:
- { name: 'kernel.event_listener', event: 'acme.pizza.order.created', method: 'onOrderCreated' }
Namespace Collisions:
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',
));
Form Theme Overrides:
{# src/Resources/views/Form/fields.html.twig #}
{% extends '@AcmePizza/Form/fields.html.twig' %}
php bin/console cache:clear
Database Schema Conflicts:
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',
));
}
}
}
Deprecated Symfony Features:
app/console). For Symfony 4/5:
app/console with bin/console.app/config/ to config/.Enable Debug Mode:
APP_ENV=dev in .env and enable debug toolbar for form/route issues.Log Events:
config/services.yaml:
services:
App\EventListener\DebugListener:
tags:
- { name: 'kernel.event_listener', event: 'acme.pizza.order.*', method: 'logEvent' }
Check Routes:
php bin/console debug:router | grep acme_pizza
Custom Controllers:
src/Controller/PizzaController.php):
use Acme\PizzaBundle\Controller\OrderController as BaseOrderController;
class PizzaController extends BaseOrderController {
public function orderAction() {
// Custom logic
return parent::orderAction();
}
}
config/routes.yaml:
acme_pizza:
resource: "@App\Controller/PizzaController::order"
Fixtures:
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());
}
}
php bin/console doctrine:fixtures:load
Validation:
Order entity:
use Symfony\Component\Validator\Constraints as Assert;
class Order {
/**
* @Assert\Length(min=5)
*/
private $customField;
}
How can I help you explore Laravel packages today?