# Bridge collectors

DebugBar comes with some "bridge" collectors. This collectors provides a way to integrate
other projects with the DebugBar.

## CacheCache

http://maximebf.github.io/CacheCache/

Displays cache operations using `DebugBar\Bridge\CacheCacheCollector`

    $cache = new CacheCache\Cache(new CacheCache\Backends\Memory());
    $debugbar->addCollector(new DebugBar\Bridge\CacheCacheCollector($cache));

CacheCache uses [Monolog](https://github.com/Seldaek/monolog) for logging,
thus it is required to collect data.

`CacheCacheCollector` subclasses `MonologCollector`, thus it can be
[aggregated in the messages view](base-collectors.html#messages).

## Doctrine

http://doctrine-project.org

Displays sql queries into an SQL queries view using `DebugBar\Bridge\DoctrineCollector`.
You will need to set a `Doctrine\DBAL\Logging\DebugStack` logger on your connection.

    $debugStack = new Doctrine\DBAL\Logging\DebugStack();
    $entityManager->getConnection()->getConfiguration()->setSQLLogger($debugStack);
    $debugbar->addCollector(new DebugBar\Bridge\DoctrineCollector($debugStack));

`DoctrineCollector` also accepts an `Doctrine\ORM\EntityManager` as argument
provided the `SQLLogger` is a ̀DebugStack`.

## Monolog

https://github.com/Seldaek/monolog

Integrates Monolog messages into a message view using `DebugBar\Bridge\MonologCollector`.

    $logger = new Monolog\Logger('mylogger');
    $debugbar->addCollector(new DebugBar\Bridge\MonologCollector($logger));

Note that multiple logger can be collected:

    $debugbar['monolog']->addLogger($logger);

`MonologCollector` can be [aggregated](base-collectors.html#messages) into the `MessagesCollector`.

## Propel

http://propelorm.org/

Displays propel queries into an SQL queries view using `DebugBar\Bridge\PropelCollector`.
You will need to activate Propel debug mode.

    // before Propel::init()
    $debugbar->addCollector(new DebugBar\Bridge\PropelCollector());

    Propel::init('/path/to/config');

    // after Propel::init()
    // not mandatory if you set config options by yourself
    DebugBar\Bridge\PropelCollector::enablePropelProfiling();

Queries can be collected on a single connection by providing the `PropelPDO` object
to the `PropelCollector` as first argument.

## Slim

http://slimframework.com

Displays message from the Slim logger into a message view using `DebugBar\Bridge\SlimCollector`.

    $app = new Slim\Slim();
    $debugbar->addCollector(new DebugBar\Bridge\SlimCollector($app));

## Swift Mailer

http://swiftmailer.org/

Display log messages and sent mail using `DebugBar\Bridge\SwiftMailer\SwiftLogCollector` and
`DebugBar\Bridge\SwiftMailer\SwiftMailCollector`.

    $mailer = Swift_Mailer::newInstance(Swift_NullTransport::newInstance());
    $debugbar['messages']->aggregate(new DebugBar\Bridge\SwiftMailer\SwiftLogCollector($mailer));
    $debugbar->addCollector(new DebugBar\Bridge\SwiftMailer\SwiftMailCollector($mailer));

## Symfony Mailer

https://symfony.com/doc/current/mailer.html

Display log messages and sent mail using `DebugBar\Bridge\Symfony\SymfonyMailCollector`

    use Symfony\Component\Mailer\Event\SentMessageEvent;

    $mailCollector = new DebugBar\Bridge\Symfony\SymfonyMailCollector();
    $debugbar->addCollector($mailCollector);
    $eventDispatcher->addListener(SentMessageEvent::class, function (SentMessageEvent $event) use (&$mailCollector): void {
        $mailCollector->addSymfonyMessage($event->getMessage());
    });

## Twig

http://twig.sensiolabs.org/

### Version 1 and 2

This collector uses the class `Twig_Extension_Profiler` to collect info about rendered
templates, blocks and macros.
You need to inject the root `Twig_Profiler_Profile` into the collector:

```php
$loader = new Twig_Loader_Filesystem('.');
$env = new Twig_Environment($loader);
$profile = new Twig_Profiler_Profile();
$env->addExtension(new Twig_Extension_Profiler($profile));
$debugbar->addCollector(new DebugBar\Bridge\TwigProfileCollector($profile));
```

### Version 2 and 3

This collector uses the class `Twig\Extension\ProfilerExtension` to collect info about rendered
templates, blocks and macros.
You need to inject the root `Twig\Profiler\Profile` into the collector:

```php
use DebugBar\Bridge\NamespacedTwigProfileCollector;
use Twig\Environment;
use Twig\Extension\ProfilerExtension;
use Twig\Loader\FilesystemLoader;
use Twig\Profiler\Profile;

$loader = new FilesystemLoader('.');
$env = new Environment($loader);
$profile = new Profile();
$env->addExtension(new ProfilerExtension($profile));
$debugbar->addCollector(new NamespacedTwigProfileCollector($profile));
```

### Optional debugbar twig extensions

You can optionally use `DebugBar\Bridge\Twig\TimeableTwigExtensionProfiler` in place of
`Twig\Profiler\Profile` so render operation can be measured.

```php
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
use Twig\Profiler\Profile;

$loader = new FilesystemLoader('.');
$env = new Environment($loader);
$profile = new Profile();

$env->addExtension(new DebugBar\Bridge\Twig\TimeableTwigExtensionProfiler($profile, $debugbar['time']));
$debugbar->addCollector(new DebugBar\Bridge\TwigProfileCollector($profile));
```

Other optional extensions add functions and tags for debugbar integration into templates.

```php
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
use Twig\Profiler\Profile;

$loader = new FilesystemLoader('.');
$env = new Environment($loader);
$profile = new Profile();

// enable {% measure 'foo' %} {% endmeasure %} tags for time measure on templates
// this extension adds timeline items to TimeDataCollector
$twig->addExtension(new DebugBar\Bridge\Twig\MeasureTwigExtension($debugbar['time']));

$twig->enableDebug(); // if Twig\Environment debug is disabled, dump/debug are ignored

// enable {{ dump('foo') }} function on templates
// this extension allows dumping data using debugbar DataFormatter
$twig->addExtension(new DebugBar\Bridge\Twig\DumpTwigExtension());

// enable {{ debug('foo') }} function on templates
// this extension allows debugging in MessageCollector
$twig->addExtension(new DebugBar\Bridge\Twig\DebugTwigExtension($debugbar['messages']));

$debugbar->addCollector(new DebugBar\Bridge\TwigProfileCollector($profile));
```

