PageRenderTime 57ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://github.com/casoetan/ServerGroveLiveChat
PHP | 634 lines | 444 code | 98 blank | 92 comment | 82 complexity | 090e4b86ac5267a444d1efa6eef07208 MD5 | raw file
Possible License(s): LGPL-2.1, LGPL-3.0, ISC, BSD-3-Clause
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Bundle\FrameworkBundle\DependencyInjection;
  11. use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
  12. use Symfony\Component\DependencyInjection\Resource\FileResource;
  13. use Symfony\Component\DependencyInjection\ContainerBuilder;
  14. use Symfony\Component\DependencyInjection\Reference;
  15. use Symfony\Component\DependencyInjection\Definition;
  16. use Symfony\Component\DependencyInjection\Parameter;
  17. use Symfony\Component\Finder\Finder;
  18. use Symfony\Component\HttpFoundation\RequestMatcher;
  19. use Symfony\Component\HttpKernel\DependencyInjection\Extension;
  20. use Symfony\Component\Form\FormContext;
  21. /**
  22. * FrameworkExtension.
  23. *
  24. * @author Fabien Potencier <fabien.potencier@symfony-project.com>
  25. */
  26. class FrameworkExtension extends Extension
  27. {
  28. public function configLoad(array $configs, ContainerBuilder $container)
  29. {
  30. foreach ($configs as $config) {
  31. $this->doConfigLoad($config, $container);
  32. }
  33. }
  34. /**
  35. * Loads the web configuration.
  36. *
  37. * @param array $config An array of configuration settings
  38. * @param ContainerBuilder $container A ContainerBuilder instance
  39. */
  40. protected function doConfigLoad(array $config, ContainerBuilder $container)
  41. {
  42. $loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
  43. if (!$container->hasDefinition('controller_resolver')) {
  44. $loader->load('web.xml');
  45. }
  46. if (!$container->hasDefinition('form.factory')) {
  47. $loader->load('form.xml');
  48. }
  49. if (isset($config['csrf-protection'])) {
  50. $config['csrf_protection'] = $config['csrf-protection'];
  51. }
  52. if (isset($config['csrf_protection'])) {
  53. foreach (array('enabled', 'field_name', 'field-name', 'secret') as $key) {
  54. if (isset($config['csrf_protection'][$key])) {
  55. $container->setParameter('form.csrf_protection.'.strtr($key, '-', '_'),
  56. $config['csrf_protection'][$key]);
  57. }
  58. }
  59. }
  60. if (isset($config['ide'])) {
  61. switch ($config['ide']) {
  62. case 'textmate':
  63. $pattern = 'txmt://open?url=file://%%f&line=%%l';
  64. break;
  65. case 'macvim':
  66. $pattern = 'mvim://open?url=file://%%f&line=%%l';
  67. break;
  68. default:
  69. // should be the link pattern then
  70. $pattern = $config['ide'];
  71. }
  72. $container->setParameter('debug.file_link_format', $pattern);
  73. }
  74. foreach (array('document_root', 'document-root') as $key) {
  75. if (isset($config[$key])) {
  76. $container->setParameter('document_root', $config[$key]);
  77. }
  78. }
  79. if (!$container->hasDefinition('event_dispatcher')) {
  80. $loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
  81. $loader->load('services.xml');
  82. if ($container->getParameter('kernel.debug')) {
  83. $loader->load('debug.xml');
  84. $container->setDefinition('event_dispatcher', $container->findDefinition('debug.event_dispatcher'));
  85. $container->setAlias('debug.event_dispatcher', 'event_dispatcher');
  86. }
  87. }
  88. if (isset($config['charset'])) {
  89. $container->setParameter('kernel.charset', $config['charset']);
  90. }
  91. foreach (array('error_handler', 'error-handler') as $key) {
  92. if (array_key_exists($key, $config)) {
  93. if (false === $config[$key]) {
  94. $container->getDefinition('error_handler')->setMethodCalls(array());
  95. } else {
  96. $container->getDefinition('error_handler')->addMethodCall('register', array());
  97. $container->setParameter('error_handler.level', $config[$key]);
  98. }
  99. }
  100. }
  101. if (isset($config['router'])) {
  102. $this->registerRouterConfiguration($config, $container);
  103. }
  104. if (isset($config['profiler'])) {
  105. $this->registerProfilerConfiguration($config, $container);
  106. }
  107. if (isset($config['validation']['enabled'])) {
  108. $this->registerValidationConfiguration($config, $container);
  109. }
  110. if (array_key_exists('templating', $config)) {
  111. $this->registerTemplatingConfiguration($config, $container);
  112. }
  113. if (array_key_exists('test', $config)) {
  114. $this->registerTestConfiguration($config, $container);
  115. }
  116. if (array_key_exists('session', $config)) {
  117. $this->registerSessionConfiguration($config, $container);
  118. }
  119. // translator must always be registered (as support is included by default for forms for instance)
  120. // if you disable it, an identity translator will be used and everything will still work as expected
  121. $this->registerTranslatorConfiguration($config, $container);
  122. if (array_key_exists('esi', $config)) {
  123. $this->registerEsiConfiguration($config, $container);
  124. }
  125. if (isset($config['cache-warmer'])) {
  126. $config['cache_warmer'] = $config['cache-warmer'];
  127. }
  128. $warmer = isset($config['cache_warmer']) ? $config['cache_warmer'] : !$container->getParameter('kernel.debug');
  129. $container->setParameter('kernel.cache_warmup', $warmer);
  130. $this->addClassesToCompile(array(
  131. 'Symfony\\Component\\HttpFoundation\\ParameterBag',
  132. 'Symfony\\Component\\HttpFoundation\\HeaderBag',
  133. 'Symfony\\Component\\HttpFoundation\\Request',
  134. 'Symfony\\Component\\HttpFoundation\\Response',
  135. 'Symfony\\Component\\HttpFoundation\\ResponseHeaderBag',
  136. 'Symfony\\Component\\HttpKernel\\HttpKernel',
  137. 'Symfony\\Component\\HttpKernel\\ResponseListener',
  138. 'Symfony\\Component\\HttpKernel\\Controller\\ControllerResolver',
  139. 'Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface',
  140. 'Symfony\\Bundle\\FrameworkBundle\\RequestListener',
  141. 'Symfony\\Bundle\\FrameworkBundle\\Controller\\ControllerNameParser',
  142. 'Symfony\\Bundle\\FrameworkBundle\\Controller\\ControllerResolver',
  143. 'Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller',
  144. 'Symfony\\Component\\EventDispatcher\\EventInterface',
  145. 'Symfony\\Component\\EventDispatcher\\Event',
  146. 'Symfony\\Component\\EventDispatcher\\EventDispatcherInterface',
  147. 'Symfony\\Component\\EventDispatcher\\EventDispatcher',
  148. 'Symfony\\Bundle\\FrameworkBundle\\EventDispatcher',
  149. 'Symfony\\Component\\Form\\FormContext',
  150. 'Symfony\\Component\\Form\\FormContextInterface',
  151. ));
  152. }
  153. /**
  154. * Loads the templating configuration.
  155. *
  156. * @param array $config An array of configuration settings
  157. * @param ContainerBuilder $container A ContainerBuilder instance
  158. */
  159. protected function registerTemplatingConfiguration(array $config, ContainerBuilder $container)
  160. {
  161. $config = isset($config['templating']) ? $config['templating'] : array();
  162. if (!$container->hasDefinition('templating.locator')) {
  163. $loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
  164. $loader->load('templating.xml');
  165. $loader->load('templating_php.xml');
  166. if ($container->getParameter('kernel.debug')) {
  167. $loader->load('templating_debug.xml');
  168. }
  169. }
  170. if (array_key_exists('assets-version', $config)) {
  171. $container->setParameter('templating.assets.version', $config['assets-version']);
  172. }
  173. if (array_key_exists('assets_version', $config)) {
  174. $container->setParameter('templating.assets.version', $config['assets_version']);
  175. }
  176. if (array_key_exists('assets-base-urls', $config)) {
  177. $container->setParameter('templating.assets.base_urls', $config['assets-base-urls']);
  178. }
  179. if (array_key_exists('assets_base_urls', $config)) {
  180. $container->setParameter('templating.assets.base_urls', $config['assets_base_urls']);
  181. }
  182. // loaders
  183. if (isset($config['loader'])) {
  184. $loaders = array();
  185. $ids = is_array($config['loader']) ? $config['loader'] : array($config['loader']);
  186. foreach ($ids as $id) {
  187. $loaders[] = new Reference($id);
  188. }
  189. if (1 === count($loaders)) {
  190. $container->setAlias('templating.loader', (string) $loaders[0]);
  191. } else {
  192. $container->getDefinition('templating.loader.chain')->addArgument($loaders);
  193. $container->setAlias('templating.loader', 'templating.loader.chain');
  194. }
  195. }
  196. // cache?
  197. $container->setParameter('templating.loader.cache.path', null);
  198. if (isset($config['cache'])) {
  199. // wrap the loader with some cache
  200. $container->setDefinition('templating.loader.wrapped', $container->findDefinition('templating.loader'));
  201. $container->setDefinition('templating.loader', $container->getDefinition('templating.loader.cache'));
  202. $container->setParameter('templating.loader.cache.path', $config['cache']);
  203. }
  204. if (isset($config['cache-warmer'])) {
  205. $config['cache_warmer'] = $config['cache-warmer'];
  206. }
  207. if (isset($config['cache_warmer']) && $config['cache_warmer']) {
  208. $container->getDefinition('templating.cache_warmer.template_paths')->addTag('kernel.cache_warmer');
  209. $container->setAlias('templating.locator', 'templating.locator.cached');
  210. }
  211. // engines
  212. if (!$engines = $this->normalizeConfig($config, 'engine')) {
  213. throw new \LogicException('You must register at least one templating engine.');
  214. }
  215. $this->addClassesToCompile(array(
  216. 'Symfony\\Bundle\\FrameworkBundle\\Templating\\EngineInterface',
  217. 'Symfony\\Component\\Templating\\EngineInterface',
  218. 'Symfony\\Bundle\\FrameworkBundle\\Templating\\Loader\\TemplateLocatorInterface',
  219. $container->findDefinition('templating.locator')->getClass(),
  220. ));
  221. foreach ($engines as $i => $engine) {
  222. $id = is_array($engine) ? $engine['id'] : $engine;
  223. $engines[$i] = new Reference('templating.engine.'.$id);
  224. if ('php' === $id) {
  225. $this->addClassesToCompile(array(
  226. 'Symfony\\Component\\Templating\\PhpEngine',
  227. 'Symfony\\Component\\Templating\\TemplateNameParserInterface',
  228. 'Symfony\\Component\\Templating\\TemplateNameParser',
  229. 'Symfony\\Component\\Templating\\Loader\\LoaderInterface',
  230. 'Symfony\\Component\\Templating\\Storage\\Storage',
  231. 'Symfony\\Component\\Templating\\Storage\\FileStorage',
  232. 'Symfony\\Bundle\\FrameworkBundle\\Templating\\PhpEngine',
  233. 'Symfony\\Bundle\\FrameworkBundle\\Templating\\TemplateNameParser',
  234. 'Symfony\\Bundle\\FrameworkBundle\\Templating\\Loader\\FilesystemLoader',
  235. ));
  236. }
  237. }
  238. if (1 === count($engines)) {
  239. $container->setAlias('templating', (string) $engines[0]);
  240. } else {
  241. $def = $container->getDefinition('templating.engine.delegating');
  242. $def->setArgument(1, $engines);
  243. $container->setAlias('templating', 'templating.engine.delegating');
  244. }
  245. }
  246. /**
  247. * Loads the test configuration.
  248. *
  249. * @param array $config A configuration array
  250. * @param ContainerBuilder $container A ContainerBuilder instance
  251. */
  252. protected function registerTestConfiguration(array $config, ContainerBuilder $container)
  253. {
  254. $loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
  255. $loader->load('test.xml');
  256. $container->setAlias('session.storage', 'session.storage.array');
  257. }
  258. /**
  259. * Loads the ESI configuration.
  260. *
  261. * @param array $config A configuration array
  262. * @param ContainerBuilder $container A ContainerBuilder instance
  263. */
  264. protected function registerEsiConfiguration(array $config, ContainerBuilder $container)
  265. {
  266. if (isset($config['esi']['enabled']) && $config['esi']['enabled']) {
  267. if (!$container->hasDefinition('esi')) {
  268. $loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
  269. $loader->load('esi.xml');
  270. }
  271. }
  272. }
  273. /**
  274. * Loads the translator configuration.
  275. *
  276. * @param array $config A configuration array
  277. * @param ContainerBuilder $container A ContainerBuilder instance
  278. */
  279. protected function registerTranslatorConfiguration(array $config, ContainerBuilder $container)
  280. {
  281. $first = false;
  282. if (!$container->hasDefinition('translator')) {
  283. $first = true;
  284. $loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
  285. $loader->load('translation.xml');
  286. }
  287. $config = array_key_exists('translator', $config) ? $config['translator'] : array();
  288. if (!is_array($config)) {
  289. $config = array();
  290. }
  291. if (!isset($config['translator']['enabled']) || $config['translator']['enabled']) {
  292. // use the "real" translator
  293. $container->setDefinition('translator', $container->findDefinition('translator.real'));
  294. if ($first) {
  295. // translation directories
  296. $dirs = array();
  297. foreach ($container->getParameter('kernel.bundles') as $bundle) {
  298. $reflection = new \ReflectionClass($bundle);
  299. if (is_dir($dir = dirname($reflection->getFilename()).'/Resources/translations')) {
  300. $dirs[] = $dir;
  301. }
  302. }
  303. if (is_dir($dir = $container->getParameter('kernel.root_dir').'/translations')) {
  304. $dirs[] = $dir;
  305. }
  306. // translation resources
  307. $resources = array();
  308. if ($dirs) {
  309. $finder = new Finder();
  310. $finder->files()->filter(function (\SplFileInfo $file) { return 2 === substr_count($file->getBasename(), '.'); })->in($dirs);
  311. foreach ($finder as $file) {
  312. // filename is domain.locale.format
  313. list($domain, $locale, $format) = explode('.', $file->getBasename());
  314. $resources[] = array($format, (string) $file, $locale, $domain);
  315. }
  316. }
  317. $container->setParameter('translation.resources', $resources);
  318. }
  319. }
  320. if (array_key_exists('fallback', $config)) {
  321. $container->setParameter('translator.fallback_locale', $config['fallback']);
  322. }
  323. }
  324. /**
  325. * Loads the session configuration.
  326. *
  327. * @param array $config A configuration array
  328. * @param ContainerBuilder $container A ContainerBuilder instance
  329. */
  330. protected function registerSessionConfiguration(array $config, ContainerBuilder $container)
  331. {
  332. if (!$container->hasDefinition('session')) {
  333. $loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
  334. $loader->load('session.xml');
  335. }
  336. $config = isset($config['session']) ? $config['session'] : array();
  337. foreach (array('default_locale', 'default-locale') as $key) {
  338. if (isset($config[$key])) {
  339. $container->setParameter('session.default_locale', $config[$key]);
  340. }
  341. }
  342. if (isset($config['auto-start'])) {
  343. $config['auto_start'] = $config['auto-start'];
  344. }
  345. if (isset($config['auto_start']) && $config['auto_start']) {
  346. $container->getDefinition('session')->addMethodCall('start');
  347. }
  348. if (isset($config['class'])) {
  349. $container->setParameter('session.class', $config['class']);
  350. }
  351. if (isset($config['storage-id'])) {
  352. $config['storage_id'] = $config['storage-id'];
  353. }
  354. if (isset($config['storage_id'])) {
  355. $container->setAlias('session.storage', 'session.storage.'.$config['storage_id']);
  356. } else {
  357. $config['storage_id'] = 'native';
  358. }
  359. $options = $container->getParameter('session.storage.'.strtolower($config['storage_id']).'.options');
  360. foreach (array('name', 'lifetime', 'path', 'domain', 'secure', 'httponly', 'cache_limiter', 'pdo.db_table', 'pdo.db_id_col', 'pdo.db_data_col', 'pdo.db_time_col') as $name) {
  361. $key = str_replace('pdo.', '', $name);
  362. if (isset($config[$name])) {
  363. $options[$key] = $config[$name];
  364. }
  365. $nName = str_replace('_', '-', $name);
  366. if (isset($config[$nName])) {
  367. $options[$key] = $config[$nName];
  368. }
  369. }
  370. $container->setParameter('session.storage.'.strtolower($config['storage_id']).'.options', $options);
  371. $this->addClassesToCompile(array(
  372. 'Symfony\\Component\\HttpFoundation\\Session',
  373. 'Symfony\\Component\\HttpFoundation\\SessionStorage\\SessionStorageInterface',
  374. $container->getParameter('session.class'),
  375. ));
  376. }
  377. /**
  378. * Loads the router configuration.
  379. *
  380. * @param array $config A configuration array
  381. * @param ContainerBuilder $container A ContainerBuilder instance
  382. */
  383. protected function registerRouterConfiguration(array $config, ContainerBuilder $container)
  384. {
  385. if (!$container->hasDefinition('router')) {
  386. $loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
  387. $loader->load('routing.xml');
  388. }
  389. $container->setParameter('routing.resource', $config['router']['resource']);
  390. if (isset($config['router']['cache-warmer'])) {
  391. $config['router']['cache_warmer'] = $config['router']['cache-warmer'];
  392. }
  393. if (isset($config['router']['cache_warmer']) && $config['router']['cache_warmer']) {
  394. $container->getDefinition('router.cache_warmer')->addTag('kernel.cache_warmer');
  395. $container->setAlias('router', 'router.cached');
  396. }
  397. $this->addClassesToCompile(array(
  398. 'Symfony\\Component\\Routing\\RouterInterface',
  399. 'Symfony\\Component\\Routing\\Matcher\\UrlMatcherInterface',
  400. 'Symfony\\Component\\Routing\\Matcher\\UrlMatcher',
  401. 'Symfony\\Component\\Routing\\Generator\\UrlGeneratorInterface',
  402. 'Symfony\\Component\\Routing\\Generator\\UrlGenerator',
  403. $container->findDefinition('router')->getClass()
  404. ));
  405. }
  406. /**
  407. * Loads the profiler configuration.
  408. *
  409. * <app:profiler only-exceptions="false">
  410. * <matcher ip="192.168.0.0/24" path="#/admin/#i" />
  411. * <matcher>
  412. * <service class="MyMatcher" />
  413. * </matcher>
  414. * <matcher service="my_matcher" />
  415. * </app:profiler>
  416. *
  417. * @param array $config A configuration array
  418. * @param ContainerBuilder $container A ContainerBuilder instance
  419. */
  420. protected function registerProfilerConfiguration(array $config, ContainerBuilder $container)
  421. {
  422. if ($config['profiler']) {
  423. if (!$container->hasDefinition('profiler')) {
  424. $loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
  425. $loader->load('profiling.xml');
  426. $loader->load('collectors.xml');
  427. }
  428. if (isset($config['profiler']['only-exceptions'])) {
  429. $container->setParameter('profiler_listener.only_exceptions', $config['profiler']['only-exceptions']);
  430. } elseif (isset($config['profiler']['only_exceptions'])) {
  431. $container->setParameter('profiler_listener.only_exceptions', $config['profiler']['only_exceptions']);
  432. }
  433. if (isset($config['profiler']['matcher'])) {
  434. if (isset($config['profiler']['matcher']['service'])) {
  435. $container->setAlias('profiler.request_matcher', $config['profiler']['matcher']['service']);
  436. } elseif (isset($config['profiler']['matcher']['_services'])) {
  437. $container->setAlias('profiler.request_matcher', (string) $config['profiler']['matcher']['_services'][0]);
  438. } else {
  439. $definition = $container->register('profiler.request_matcher', 'Symfony\\Component\\HttpFoundation\\RequestMatcher');
  440. $definition->setPublic(false);
  441. if (isset($config['profiler']['matcher']['ip'])) {
  442. $definition->addMethodCall('matchIp', array($config['profiler']['matcher']['ip']));
  443. }
  444. if (isset($config['profiler']['matcher']['path'])) {
  445. $definition->addMethodCall('matchPath', array($config['profiler']['matcher']['path']));
  446. }
  447. }
  448. } else {
  449. $container->removeAlias('profiler.request_matcher');
  450. }
  451. } elseif ($container->hasDefinition('profiler')) {
  452. $container->getDefinition('profiling')->clearTags();
  453. }
  454. }
  455. /**
  456. * Loads the validator configuration.
  457. *
  458. * @param array $config A configuration array
  459. * @param ContainerBuilder $container A ContainerBuilder instance
  460. */
  461. protected function registerValidationConfiguration(array $config, ContainerBuilder $container)
  462. {
  463. if ($config['validation']['enabled']) {
  464. if (!$container->hasDefinition('validator')) {
  465. $loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
  466. $loader->load('validator.xml');
  467. }
  468. $xmlMappingFiles = array();
  469. $yamlMappingFiles = array();
  470. // default entries by the framework
  471. $xmlMappingFiles[] = __DIR__.'/../../../Component/Form/Resources/config/validation.xml';
  472. foreach ($container->getParameter('kernel.bundles') as $bundle) {
  473. $reflection = new \ReflectionClass($bundle);
  474. if (file_exists($file = dirname($reflection->getFilename()).'/Resources/config/validation.xml')) {
  475. $xmlMappingFiles[] = realpath($file);
  476. }
  477. if (file_exists($file = dirname($reflection->getFilename()).'/Resources/config/validation.yml')) {
  478. $yamlMappingFiles[] = realpath($file);
  479. }
  480. }
  481. $xmlFilesLoader = new Definition(
  482. $container->getParameter('validator.mapping.loader.xml_files_loader.class'),
  483. array($xmlMappingFiles)
  484. );
  485. $xmlFilesLoader->setPublic(false);
  486. $yamlFilesLoader = new Definition(
  487. $container->getParameter('validator.mapping.loader.yaml_files_loader.class'),
  488. array($yamlMappingFiles)
  489. );
  490. $yamlFilesLoader->setPublic(false);
  491. $container->setDefinition('validator.mapping.loader.xml_files_loader', $xmlFilesLoader);
  492. $container->setDefinition('validator.mapping.loader.yaml_files_loader', $yamlFilesLoader);
  493. foreach ($xmlMappingFiles as $file) {
  494. $container->addResource(new FileResource($file));
  495. }
  496. foreach ($yamlMappingFiles as $file) {
  497. $container->addResource(new FileResource($file));
  498. }
  499. if (isset($config['validation']['annotations'])) {
  500. if (isset($config['validation']['annotations']['namespaces']) && is_array($config['validation']['annotations']['namespaces'])) {
  501. $container->setParameter('validator.annotations.namespaces', array_merge(
  502. $container->getParameter('validator.annotations.namespaces'),
  503. $config['validation']['annotations']['namespaces']
  504. ));
  505. }
  506. $annotationLoader = new Definition($container->getParameter('validator.mapping.loader.annotation_loader.class'));
  507. $annotationLoader->setPublic(false);
  508. $annotationLoader->addArgument(new Parameter('validator.annotations.namespaces'));
  509. $container->setDefinition('validator.mapping.loader.annotation_loader', $annotationLoader);
  510. $loader = $container->getDefinition('validator.mapping.loader.loader_chain');
  511. $arguments = $loader->getArguments();
  512. array_unshift($arguments[0], new Reference('validator.mapping.loader.annotation_loader'));
  513. $loader->setArguments($arguments);
  514. }
  515. } elseif ($container->hasDefinition('validator')) {
  516. $container->getDefinition('validator')->clearTags();
  517. }
  518. }
  519. /**
  520. * Returns the base path for the XSD files.
  521. *
  522. * @return string The XSD base path
  523. */
  524. public function getXsdValidationBasePath()
  525. {
  526. return __DIR__.'/../Resources/config/schema';
  527. }
  528. public function getNamespace()
  529. {
  530. return 'http://www.symfony-project.org/schema/dic/symfony';
  531. }
  532. public function getAlias()
  533. {
  534. return 'app';
  535. }
  536. }