@@ -279,85 +279,6 @@ The ``newsletter_manager`` and ``mailer`` services can be set up using config fi
279
279
$container->register('newsletter_manager', 'NewsletterManager')
280
280
->addMethodCall('setMailer', new Reference('mailer');
281
281
282
- Dumping the Configuration for Performance
283
- -----------------------------------------
284
-
285
- Using configuration files to manage the service container can be much easier
286
- to understand than using PHP once there are a lot of services. This ease comes
287
- at a price though when it comes to performance as the config files need to be
288
- parsed and the PHP configuration built from them. You can have the best of both
289
- worlds though by using configuration files and then dumping and caching the resulting
290
- configuration. The ``PhpDumper `` makes dumping the compiled container easy::
291
-
292
- use Symfony\Component\DependencyInjection\ContainerBuilder;
293
- use Symfony\Component\Config\FileLocator;
294
- use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
295
- use Symfony\Component\DependencyInjection\Dumper\PhpDumper
296
-
297
- $container = new ContainerBuilder();
298
- $loader = new XmlFileLoader($container, new FileLocator(__DIR__));
299
- $loader->load('services.xml');
300
-
301
- $file = __DIR__ .'/cache/container.php';
302
-
303
- if (file_exists($file)) {
304
- require_once $file;
305
- $container = new ProjectServiceContiner();
306
- } else {
307
- $container = new ContainerBuilder();
308
- $loader = new XmlFileLoader($container, new FileLocator(__DIR__));
309
- $loader->load('services.xml');
310
-
311
- $dumper = new PhpDumper($container);
312
- file_put_contents($file, $dumper->dump());
313
- }
314
-
315
- ``ProjectServiceContiner `` is the default name given to the dumped container
316
- class, you can change this though this with the ``class `` option when you dump
317
- it::
318
-
319
- // ...
320
- $file = __DIR__ .'/cache/container.php';
321
-
322
- if (file_exists($file)) {
323
- require_once $file;
324
- $container = new MyCachedContainer();
325
- } else {
326
- $container = new ContainerBuilder();
327
- $loader = new XmlFileLoader($container, new FileLocator(__DIR__));
328
- $loader->load('services.xml');
329
-
330
- $dumper = new PhpDumper($container);
331
- file_put_contents($file, $dumper->dump(array('class' => 'MyCachedContainer')));
332
- }
333
-
334
- You will now get the speed of the PHP configured container with the ease of using
335
- configuration files. In the above example you will need to delete the cached
336
- container file whenever you make any changes. Adding a check for a variable that
337
- determines if you are in debug mode allows you to keep the speed of the cached
338
- container in production but getting an up to date configuration whilst developing
339
- your application::
340
-
341
- // ...
342
-
343
- // set $isDebug based on something in your project
344
-
345
- $file = __DIR__ .'/cache/container.php';
346
-
347
- if (!$isDebug && file_exists($file)) {
348
- require_once $file;
349
- $container = new MyCachedContainer();
350
- } else {
351
- $container = new ContainerBuilder();
352
- $loader = new XmlFileLoader($container, new FileLocator(__DIR__));
353
- $loader->load('services.xml');
354
-
355
- if(!$isDebug) {
356
- $dumper = new PhpDumper($container);
357
- file_put_contents($file, $dumper->dump(array('class' => 'MyCachedContainer')));
358
- }
359
- }
360
-
361
282
Learn more about this Component
362
283
-------------------------------
363
284
0 commit comments