Skip to content

Commit 28d9b33

Browse files
committed
[FrameworkBundle] made the profiler easily configurable
1 parent 8cc37ea commit 28d9b33

File tree

5 files changed

+39
-18
lines changed

5 files changed

+39
-18
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,11 @@ private function addProfilerSection(NodeBuilder $rootNode)
7676
$rootNode
7777
->arrayNode('profiler')
7878
->canBeUnset()
79-
->booleanNode('only_exceptions')->end()
79+
->booleanNode('only_exceptions')->defaultValue(false)->end()
80+
->scalarNode('dsn')->defaultValue('sqlite:%kernel.cache_dir%/profiler.db')->end()
81+
->scalarNode('username')->defaultValue('')->end()
82+
->scalarNode('password')->defaultValue('')->end()
83+
->scalarNode('lifetime')->defaultValue(86400)->end()
8084
->arrayNode('matcher')
8185
->canBeUnset()
8286
->performNoDeepMerging()

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,9 +194,27 @@ private function registerProfilerConfiguration(array $config, ContainerBuilder $
194194
$loader->load('profiling.xml');
195195
$loader->load('collectors.xml');
196196

197-
if (isset($config['only_exceptions'])) {
198-
$container->setParameter('profiler_listener.only_exceptions', $config['only_exceptions']);
199-
}
197+
$container->getDefinition('profiler_listener')
198+
->setArgument(2, $config['only_exceptions'])
199+
;
200+
201+
// Choose storage class based on the DSN
202+
$supported = array(
203+
'sqlite' => 'Symfony\Component\HttpKernel\Profiler\SqliteProfilerStorage',
204+
'mysql' => 'Symfony\Component\HttpKernel\Profiler\MysqlProfilerStorage',
205+
);
206+
list($class, ) = explode(':', $config['dsn']);
207+
if (!isset($supported[$class])) {
208+
throw new \LogicException(sprintf('Driver "%s" is not supported for the profiler.', $class));
209+
}
210+
211+
$container->getDefinition('profiler.storage')
212+
->setArgument(0, $config['dsn'])
213+
->setArgument(1, $config['username'])
214+
->setArgument(2, $config['password'])
215+
->setArgument(3, $config['lifetime'])
216+
->setClass($supported[$class])
217+
;
200218

201219
if (isset($config['matcher'])) {
202220
if (isset($config['matcher']['service'])) {

src/Symfony/Bundle/FrameworkBundle/Resources/config/profiling.xml

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,7 @@
66

77
<parameters>
88
<parameter key="profiler.class">Symfony\Component\HttpKernel\Profiler\Profiler</parameter>
9-
<parameter key="profiler.storage.class">Symfony\Component\HttpKernel\Profiler\SqliteProfilerStorage</parameter>
10-
<parameter key="profiler.storage.dsn">sqlite:%kernel.cache_dir%/profiler.db</parameter>
11-
<parameter key="profiler.storage.username"></parameter>
12-
<parameter key="profiler.storage.password"></parameter>
13-
<parameter key="profiler.storage.lifetime">86400</parameter>
149
<parameter key="profiler_listener.class">Symfony\Bundle\FrameworkBundle\Profiler\ProfilerListener</parameter>
15-
<parameter key="profiler_listener.only_exceptions">false</parameter>
1610
</parameters>
1711

1812
<services>
@@ -21,19 +15,19 @@
2115
<argument type="service" id="logger" on-invalid="null" />
2216
</service>
2317

24-
<service id="profiler.storage" class="%profiler.storage.class%" public="false">
25-
<argument>%profiler.storage.dsn%</argument>
26-
<argument>%profiler.storage.username%</argument>
27-
<argument>%profiler.storage.password%</argument>
28-
<argument>%profiler.storage.lifetime%</argument>
18+
<service id="profiler.storage" class="" public="false">
19+
<argument /> <!-- DSN -->
20+
<argument /> <!-- Username -->
21+
<argument /> <!-- Password -->
22+
<argument /> <!-- Lifetime -->
2923
</service>
3024

3125
<service id="profiler_listener" class="%profiler_listener.class%">
3226
<tag name="kernel.listener" event="core.response" method="handleResponse" />
3327
<tag name="kernel.listener" event="core.exception" method="handleException" />
3428
<argument type="service" id="service_container" />
3529
<argument type="service" id="profiler.request_matcher" on-invalid="null" />
36-
<argument>%profiler_listener.only_exceptions%</argument>
30+
<argument /> <!-- Only exceptions? -->
3731
</service>
3832
</services>
3933
</container>

src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@
5353
<xsd:element name="matcher" type="profiler_matcher" minOccurs="0" maxOccurs="1" />
5454
</xsd:all>
5555

56-
<xsd:attribute name="only-exceptions" type="xsd:boolean" />
56+
<xsd:attribute name="only-exceptions" type="xsd:string" />
57+
<xsd:attribute name="dsn" type="xsd:string" />
58+
<xsd:attribute name="username" type="xsd:string" />
59+
<xsd:attribute name="password" type="xsd:string" />
60+
<xsd:attribute name="lifetime" type="xsd:string" />
5761
</xsd:complexType>
5862

5963
<xsd:complexType name="profiler_matcher">

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public function testProfiler()
4242

4343
$this->assertTrue($container->hasDefinition('profiler'), '->registerProfilerConfiguration() loads profiling.xml');
4444
$this->assertTrue($container->hasDefinition('data_collector.config'), '->registerProfilerConfiguration() loads collectors.xml');
45-
$this->assertTrue($container->getParameter('profiler_listener.only_exceptions'));
45+
$arguments = $container->getDefinition('profiler_listener')->getArguments();
46+
$this->assertTrue($arguments[2]);
4647
}
4748

4849
public function testRouter()

0 commit comments

Comments
 (0)