Die folgenden Gegenüberstellung soll keine Wertung der Erweiterungen sein!
... macht es für Entwickler schwieriger, den Code/die Extension zu verstehen.
Namespace | Bundle Name |
---|---|
Oneup\Bundle\DemoBundle | OneupDemoBundle |
Oneup\DemoBundle | OneupDemoBundle |
Contao\Bundle\NewsletterBundle | ContaoNewsletterBundle |
Contao\NewsletterBundle | ContaoNewsletterBundle |
<vendor>_<name>
Bundle-Name | Alias |
---|---|
OneupDemoBundle | oneup_demo |
ContaoNewsletterBundle | contao_newsletter |
<oneup-demo-bundle> ├─ Controller/ <──┐ ├─ DependencyInjection/ <──┼─ PHP-Klassen (PSR-0/PSR-4) ├─ EventListener/ <──┘ ├─ Resources/ │ ├─ config <──── Bundle-Konfiguration │ ├─ contao <──── bisheriger Contao-Code (config, dca, etc.) │ ├─ doc │ │ └─ ... <──── Dokumentation (.md/.rst) │ └─ public <──── öffentliche Ressourcen (z.B. CSS/JS) ├─ Tests/ │ └─ ... <──── Unit-Tests für die neuen Klassen ├─ .gitignore ├─ .travis.yml ├─ OneupDemoBundle.php <──── Neue Bundle-Klasse ├─ LICENSE ├─ README.md ├─ CHANGELOG.md ├─ composer.json └─ phpunit.xml.dist
<oneup-demo-bundle> ├─ src/ │ ├─ Controller/ <──┐ │ ├─ DependencyInjection/ <──┼─ PHP-Klassen (PSR-0/PSR-4) │ ├─ EventListener/ <──┘ │ └─ Resources/ │ ├─ config <──── Bundle-Konfiguration │ ├─ contao <──── bisheriger Contao-Code (config, dca, etc.) │ ├─ doc │ │ └─ ... <──── Dokumentation (.md/.rst) │ └─ public <──── öffentliche Ressourcen (z.B. CSS/JS) ├─ tests/ │ └─ ... <──── Unit-Tests für die neuen Klassen ├─ .gitignore ├─ .travis.yml ├─ OneupDemoBundle.php <──── Neue Bundle-Klasse ├─ LICENSE ├─ README.md ├─ CHANGELOG.md ├─ composer.json └─ phpunit.xml.dist
Typ | Verzeichnis |
---|---|
Commands | Command/ |
Controllers | Controller/ |
Service Container Extensions | DependencyInjection/ |
Event Listeners | EventListener/ |
Model Klassen | Model/ |
Konfiguration | Resources/config/ |
Contao Ressourcen | Resources/contao/ |
Assets (CSS, JS, Bilder) | Resources/public/ |
Übersetzungen (Symfony) | Resources/translations/ |
Übersetzungen (Contao) | Resources/contao/languages/ |
Templates (.twig) | Resources/views/ |
Templates (.html5) | Resources/contao/templates/ |
Unit-Tests | Tests/ |
// OneupDemoBundle.php
namespace Oneup\Bundle\DemoBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class OneupDemoBundle extends Bundle
{
}
Key | Wert |
---|---|
name | oneup/demo-bundle (<vendor>/<name>-bundle) |
description | Kurze Beschreibung |
type | contao-bundle |
license | MIT (auch andere Lizenzen möglich) |
require | Abhängigkeiten |
require-dev | Abhängigkeiten (nur dev-Mode) |
autoload |
PSR-4 (Standard) PSR-0 (auch unterstützt, aber deprecated) |
{
"name":"oneup/demo-bundle",
"description":"This demo bundle does whatsoever.",
"keywords":["contao", "demo", "whatsoever", "bundle", "module"],
"type":"contao-bundle",
"license":"MIT",
"homepage":"http://1up.io",
"authors":[
{
"name":"David Greminger",
"email":"dg@1up.io",
"homepage":"http://1up.io",
"role":"Developer"
}
],
"require": {
"php":">=5.4",
"contao/core-bundle":"~4.0",
},
"require-dev": {
"phpunit/phpunit": "~3.7"
},
"autoload": {
"psr-4": { "Oneup\\Bundle\\OneupDemoBundle\\": "" }
}
}
{
"name":"oneup/demo-bundle",
"description":"This demo bundle does whatsoever.",
"keywords":["contao", "demo", "whatsoever", "bundle", "module"],
"type":"contao-bundle",
"license":"MIT",
"homepage":"http://1up.io",
"authors":[
{
"name":"David Greminger",
"email":"dg@1up.io",
"homepage":"http://1up.io",
"role":"Developer"
}
],
"require": {
"php":">=5.4",
"contao/core-bundle":"~4.0",
},
"require-dev": {
"phpunit/phpunit": "~3.7"
},
"autoload": {
"psr-4": { "Oneup\\Bundle\\OneupDemoBundle\\": "src/" }
}
}
$ composer require oneup/demo-bundle
Irgendwann wird das auch über den Contao Manager (Tenside & UI) möglich sein :)
// app/AppKernel.php
public function registerBundles()
{
// Reihenfolge beachten, falls Ressourcen überschrieben werden sollen
$bundles = [
// ...
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Contao\CoreBundle\ContaoCoreBundle(),
new Contao\CalendarBundle\ContaoCalendarBundle(),
// ...
new Oneup\Bundle\DemoBundle\OneupDemoBundle(), // <-- unser neues Bundle
];
if (in_array($this->getEnvironment(), ['dev', 'test'])) {
$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Contao\InstallationBundle\ContaoInstallationBundle();
}
return $bundles;
}
// app/config/config.yml
# Oneup DemoBundle configuration
oneup_demo:
email: dev@1up.io
debug: "%kernel.debug%"
attributes:
secure: true
hidden: false
oder
Ein PHP-Objekt, welches für die Instanzierung von Objekten bzw. Services zuständig ist.
use Oneup\Bundle\DemoBundle\Mailer;
$mailer = new Mailer('sendmail');
$mailer->send('dev@1up.io', ...);
# Resources/config/services.yml
services:
oneup_demo.mailer:
class: Oneup\Bundle\DemoBundle\Mailer
arguments: [sendmail]
// Module/DemoModule.php
public function compile()
{
// ...
$container = $this->getContainer();
$mailer = $container->get('oneup_demo.mailer');
$mailer->send('dev@1up.io', ...);
}
#Resources/config/services.yml
services:
oneup_demo.mailer:
class: Oneup\Bundle\DemoBundle\Mailer
arguments: [sendmail]
/** @var Symfony\Component\DependencyInjection\ContainerInterface $container */
$container = $this->getContainer();
$container = System::getContainer();
$mailer = $container->get('oneup_demo.mailer');
$mailer->send('dev@1up.io', ...);
$ app/console debug:container
Symfony Container Public Services
=================================
--------------------------------- ---------------------------------------------
Service ID Class name
--------------------------------- ---------------------------------------------
annotation_reader Doctrine\Common\Annotations\CachedReader
contao.framework Contao\CoreBundle\Framework\ContaoFramework
contao.image.image_sizes Contao\CoreBundle\Image\ImageSizes
database_connection alias for "doctrine.dbal.default_connection"
event_dispatcher alias for "debug.event_dispatcher"
filesystem Symfony\Component\Filesystem\Filesystem
mailer alias for "swiftmailer.mailer.default"
... ...
$ app/console debug:container contao.framework
Information for Service "contao.framework"
==========================================
------------------ ---------------------------------------------
Option Value
------------------ ---------------------------------------------
Service ID contao.framework
Class Contao\CoreBundle\Framework\ContaoFramework
Tags -
Scope container
Public yes
Synthetic no
Lazy no
Synchronized no
Abstract no
Autowired no
Autowiring Types -
------------------ ---------------------------------------------
// Event/OrderPlacedEvent.php
namespace Oneup\Bundle\DemoBundle\Event;
use Symfony\Component\EventDispatcher\Event;
use Oneup\Bundle\Entity\Order;
class OrderPlacedEvent extends Event
{
const NAME = 'order.placed';
protected $order;
public function __construct(Order $order)
{
$this->order = $order;
}
public function getOrder()
{
return $this->order;
}
}
// Module\DemoModule.php
use Contao\Module;
use Oneup\Bundle\DemoBundle\Entity\Order;
use Oneup\Bundle\DemoBundle\Event\OrderPlacedEvent;
class DemoModule extends Module
{
public function compile {
{
$eventDispatcher = $this->getContainer()->get('event_dispatcher');
$order = new Order();
$event = new OrderPlacedEvent($order);
$dispatcher->dispatch(OrderPlacedEvent::NAME, $event);
}
}
namespace Oneup\Bundle\DemoBundle\EventListener;
use Symfony\Component\EventDispatcher\Event;
use Oneup\Bundle\DemoBundle\Event\OrderPlacedEvent;
use Oneup\Bundle\DemoBundle\Entity\Order;
class OrderListener
{
// ...
public function onOrderPlaced(OrderPlacedEvent $event)
{
$order = $event->getOrder();
// ... do something
}
}
# Resources/config/listeners.yml
services:
oneup_demo.order.placed_listener:
class: Oneup\Bundle\DemoBundle\EventListener\OrderListener
tags:
- { name: kernel.event_listener, event: order.placed }
namespace Oneup\Bundle\DemoBundle\EventListener;
use Symfony\Component\EventDispatcher\Event;
use Oneup\Bundle\DemoBundle\Event\OrderPlacedEvent;
use Oneup\Bundle\DemoBundle\Entity\Order;
use Oneup\Bundle\DemoBundle\Mailer;
class OrderListener
{
protected $mailer;
public function __construct(Mailer $mailer)
{
$this->mailer = $mailer;
}
public function onOrderPlaced(OrderPlacedEvent $event)
{
$order = $event->getOrder();
// ... do something
}
}
# Resources/config/listeners.yml
services:
oneup_demo.order_placed_listener:
class: Oneup\Bundle\DemoBundle\EventListener\OrderListener
arguments: ['@oneup_demo.mailer']
tags:
- { name: kernel.event_listener, event: order.placed }
$ app/console debug:event-dispatcher
Registered Listeners Grouped by Event
=====================================
"console.command" event
-----------------------
------- ------------------------------------------------------------------------------- ----------
Order Callable Priority
------- ------------------------------------------------------------------------------- ----------
#1 Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure() 2048
#2 Symfony\Bridge\Monolog\Handler\ConsoleHandler::onCommand() 255
#3 Symfony\Bridge\Monolog\Handler\ConsoleHandler::onCommand() 255
------- ------------------------------------------------------------------------------- ----------
"console.terminate" event
-------------------------
------- ----------------------------------------------------------------------------------- ----------
Order Callable Priority
------- ----------------------------------------------------------------------------------- ----------
#1 Symfony\Bundle\SwiftmailerBundle\EventListener\EmailSenderListener::onTerminate() 0
#2 Symfony\Bridge\Monolog\Handler\ConsoleHandler::onTerminate() -255
#3 Symfony\Bridge\Monolog\Handler\ConsoleHandler::onTerminate() -255
------- ----------------------------------------------------------------------------------- ----------
$ app/console debug:event-dispatcher kernel.terminate
Registered Listeners for "kernel.terminate" Event
=================================================
------- ----------------------------------------------------------------------------------- ----------
Order Callable Priority
------- ----------------------------------------------------------------------------------- ----------
#1 Contao\CoreBundle\EventListener\AddToSearchIndexListener::onKernelTerminate() 0
#2 Contao\CoreBundle\EventListener\CommandSchedulerListener::onKernelTerminate() 0
#3 Symfony\Bundle\SwiftmailerBundle\EventListener\EmailSenderListener::onTerminate() 0
#4 Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelTerminate() -1024
------- ----------------------------------------------------------------------------------- ----------
$ app/console contao:symlinks
// app/AppKernel.php
use Contao\CoreBundle\HttpKernel\Bundle\ContaoModuleBundle;
public function registerBundles()
{
$bundles = [
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Contao\CoreBundle\ContaoCoreBundle(),
// Register old contao extension
new ContaoModuleBundle('dlh_googlemaps', $this->getRootDir()),
];
// ...
return $bundles;
}
Happy coding!