<?php

namespace MyApp\MyAppBundle\DependencyInjection;

use 
Symfony\Component\DependencyInjection\ContainerBuilder;
use 
Symfony\Component\Config\FileLocator;
use 
Symfony\Component\HttpKernel\DependencyInjection\Extension;
use 
Symfony\Component\DependencyInjection\Loader;
use 
Symfony\Component\Config\Definition\Processor;

/**
 * This is the class that loads and manages your bundle configuration
 *
 * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
 */
class MyAppExtension extends Extension
{
    
/**
     * {@inheritDoc}
     */
    
public function load(array $configsContainerBuilder $container)
    {
        
$processor = new Processor();
        
$configuration = new Configuration($container->getParameter('kernel.debug'));
        
$config $processor->processConfiguration($configuration$configs);

        if (!
$container->hasParameter('my_app.cache.server')) {
            if (!isset(
$config['cache']['server'])) {
                throw new \
InvalidArgumentException('MyAppBundle expects a "cache server" parameter');
            } else {
                
$container->setParameter('my_app.cache.server'$config['cache']['server']);
            }
        }

        if (!
$container->hasParameter('my_app.cache.port')) {
            if (!isset(
$config['cache']['port'])) {
                throw new \
InvalidArgumentException('MyAppBundle expects a "cache port" parameter');
            } else {
                
$container->setParameter('my_app.cache.port'$config['cache']['port']);
            }
        }

        if (!
$container->hasParameter('my_app.cache.expire')) {
            if (!isset(
$config['cache']['expire'])) {
                throw new \
InvalidArgumentException('MyAppBundle expects a "cache expire" parameter (in seconds)');
            } else {
                
$container->setParameter('my_app.cache.expire'$config['cache']['expire']);
            }
        }
    }

    
/**
     * Returns the recommended alias to use in XML.
     *
     * This alias is also the mandatory prefix to use when using YAML.
     *
     * @return string The alias
     */
    
public function getAlias()
    {
        return 
'my_app';
    }
}