├── README.md ├── app ├── cache │ └── .gitkeep ├── logs │ └── .gitkeep ├── persistance │ └── .gitignore ├── config │ ├── routing.yml │ ├── services.yml │ ├── config_test.yml │ ├── routing_dev.yml │ ├── config_prod.yml │ ├── parameters.yml.dist │ ├── security.yml │ ├── config_staging.yml │ ├── config_dev.yml │ └── config.yml ├── .htaccess ├── AppCache.php ├── autoload.php ├── DoctrineMigrations │ └── Version20151121041532.php ├── Resources │ └── views │ │ ├── default │ │ └── index.html.twig │ │ └── base.html.twig ├── console ├── phpunit.xml.dist ├── AppKernel.php ├── check.php └── SymfonyRequirements.php ├── .bowerrc ├── web ├── favicon.ico ├── apple-touch-icon.png ├── robots.txt ├── app_staging.php ├── app_dev.php ├── app.php ├── .htaccess └── config.php ├── bower.json ├── src ├── .htaccess └── AppBundle │ ├── AppBundle.php │ ├── Tests │ └── Controller │ │ └── DefaultControllerTest.php │ ├── Command │ └── SetDeployTimestampsCommand.php │ └── Controller │ └── DefaultController.php ├── .gitignore ├── composer.json └── composer.lock /README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/cache/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/logs/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/persistance/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "web/components/" 3 | } -------------------------------------------------------------------------------- /app/config/routing.yml: -------------------------------------------------------------------------------- 1 | app: 2 | resource: "@AppBundle/Controller/" 3 | type: annotation 4 | -------------------------------------------------------------------------------- /web/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/modess/deploying-symfony-applications-with-capifony/master/web/favicon.ico -------------------------------------------------------------------------------- /web/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/modess/deploying-symfony-applications-with-capifony/master/web/apple-touch-icon.png -------------------------------------------------------------------------------- /web/robots.txt: -------------------------------------------------------------------------------- 1 | # www.robotstxt.org/ 2 | # www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449 3 | 4 | User-agent: * 5 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deploying-symfony-applications-with-capifony", 3 | "dependencies": { 4 | "bootstrap": "3.3.5" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /app/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Order deny,allow 6 | Deny from all 7 | 8 | -------------------------------------------------------------------------------- /src/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Order deny,allow 6 | Deny from all 7 | 8 | -------------------------------------------------------------------------------- /src/AppBundle/AppBundle.php: -------------------------------------------------------------------------------- 1 | request('GET', '/'); 14 | 15 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); 16 | $this->assertContains('Welcome to Symfony', $crawler->filter('#container h1')->text()); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/DoctrineMigrations/Version20151121041532.php: -------------------------------------------------------------------------------- 1 | createTable('page_views'); 19 | $table->addColumn('ip', 'string'); 20 | } 21 | 22 | /** 23 | * @param Schema $schema 24 | */ 25 | public function down(Schema $schema) 26 | { 27 | $schema->dropTable('page_views'); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/config/config_prod.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: config.yml } 3 | 4 | #framework: 5 | # validation: 6 | # cache: validator.mapping.cache.apc 7 | # serializer: 8 | # cache: serializer.mapping.cache.apc 9 | 10 | #doctrine: 11 | # orm: 12 | # metadata_cache_driver: apc 13 | # result_cache_driver: apc 14 | # query_cache_driver: apc 15 | 16 | monolog: 17 | handlers: 18 | main: 19 | type: fingers_crossed 20 | action_level: error 21 | handler: nested 22 | nested: 23 | type: stream 24 | path: "%kernel.logs_dir%/%kernel.environment%.log" 25 | level: debug 26 | console: 27 | type: console 28 | -------------------------------------------------------------------------------- /app/Resources/views/default/index.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'base.html.twig' %} 2 | 3 | {% block body %} 4 |
5 |
6 |

capifony-app @ {{ environment }}

7 | {% if first_deploy %} 8 | 9 |

First deploy
{{ first_deploy }}

10 | 11 |

Latest deploy
{{ latest_deploy }}

12 | 13 |

Application life span
{{ life_span }}

14 | 15 |

Page views
{{ page_views }}

16 | 17 | {% else %} 18 |

This application has never been deployed :(

19 | {% endif %} 20 |
21 |
22 | {% endblock %} 23 | -------------------------------------------------------------------------------- /app/Resources/views/base.html.twig: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Symfony deploy 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {% block body %}{% endblock %} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/config/parameters.yml.dist: -------------------------------------------------------------------------------- 1 | # This file is a "template" of what your parameters.yml file should look like 2 | # Set parameters here that may be different on each deployment target of the app, e.g. development, staging, production. 3 | # http://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration 4 | parameters: 5 | database_host: 127.0.0.1 6 | database_port: ~ 7 | database_name: symfony 8 | database_user: root 9 | database_password: ~ 10 | # You should uncomment this if you want use pdo_sqlite 11 | # database_path: "%kernel.root_dir%/data.db3" 12 | 13 | mailer_transport: smtp 14 | mailer_host: 127.0.0.1 15 | mailer_user: ~ 16 | mailer_password: ~ 17 | 18 | # A secret key that's used to generate certain security-related tokens 19 | secret: ThisTokenIsNotSoSecretChangeIt 20 | -------------------------------------------------------------------------------- /web/app_staging.php: -------------------------------------------------------------------------------- 1 | loadClassCache(); 19 | $request = Request::createFromGlobals(); 20 | $response = $kernel->handle($request); 21 | $response->send(); 22 | $kernel->terminate($request, $response); 23 | -------------------------------------------------------------------------------- /app/config/security.yml: -------------------------------------------------------------------------------- 1 | # To get started with security, check out the documentation: 2 | # http://symfony.com/doc/current/book/security.html 3 | security: 4 | 5 | # http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers 6 | providers: 7 | in_memory: 8 | memory: ~ 9 | 10 | firewalls: 11 | # disables authentication for assets and the profiler, adapt it according to your needs 12 | dev: 13 | pattern: ^/(_(profiler|wdt)|css|images|js)/ 14 | security: false 15 | 16 | main: 17 | anonymous: ~ 18 | # activate different ways to authenticate 19 | 20 | # http_basic: ~ 21 | # http://symfony.com/doc/current/book/security.html#a-configuring-how-your-users-will-authenticate 22 | 23 | # form_login: ~ 24 | # http://symfony.com/doc/current/cookbook/security/form_login_setup.html 25 | -------------------------------------------------------------------------------- /web/app_dev.php: -------------------------------------------------------------------------------- 1 | loadClassCache(); 21 | $request = Request::createFromGlobals(); 22 | $response = $kernel->handle($request); 23 | $response->send(); 24 | $kernel->terminate($request, $response); 25 | -------------------------------------------------------------------------------- /app/console: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev'); 19 | $debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(array('--no-debug', '')) && $env !== 'prod'; 20 | 21 | if ($debug) { 22 | Debug::enable(); 23 | } 24 | 25 | $kernel = new AppKernel($env, $debug); 26 | $application = new Application($kernel); 27 | $application->run($input); 28 | -------------------------------------------------------------------------------- /src/AppBundle/Command/SetDeployTimestampsCommand.php: -------------------------------------------------------------------------------- 1 | setName('deploy:timestamps'); 16 | } 17 | 18 | protected function execute(InputInterface $input, OutputInterface $output) 19 | { 20 | if ($this->getContainer()->get('cache')->fetch('first_deploy') === false) { 21 | $this->getContainer()->get('cache')->save('first_deploy', Carbon::now()); 22 | } 23 | 24 | $this->getContainer()->get('cache')->save('latest_deploy', Carbon::now()); 25 | 26 | $output->writeln('Deploy timestamps have been set!'); 27 | } 28 | } -------------------------------------------------------------------------------- /web/app.php: -------------------------------------------------------------------------------- 1 | unregister(); 15 | $apcLoader->register(true); 16 | */ 17 | 18 | require_once __DIR__.'/../app/AppKernel.php'; 19 | //require_once __DIR__.'/../app/AppCache.php'; 20 | 21 | $kernel = new AppKernel('prod', false); 22 | $kernel->loadClassCache(); 23 | //$kernel = new AppCache($kernel); 24 | 25 | // When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter 26 | //Request::enableHttpMethodParameterOverride(); 27 | $request = Request::createFromGlobals(); 28 | $response = $kernel->handle($request); 29 | $response->send(); 30 | $kernel->terminate($request, $response); 31 | -------------------------------------------------------------------------------- /app/config/config_staging.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: config.yml } 3 | 4 | monolog: 5 | handlers: 6 | main: 7 | type: stream 8 | path: "%kernel.logs_dir%/%kernel.environment%.log" 9 | level: debug 10 | console: 11 | type: console 12 | bubble: false 13 | verbosity_levels: 14 | VERBOSITY_VERBOSE: INFO 15 | VERBOSITY_VERY_VERBOSE: DEBUG 16 | channels: ["!doctrine"] 17 | console_very_verbose: 18 | type: console 19 | bubble: false 20 | verbosity_levels: 21 | VERBOSITY_VERBOSE: NOTICE 22 | VERBOSITY_VERY_VERBOSE: NOTICE 23 | VERBOSITY_DEBUG: DEBUG 24 | channels: ["doctrine"] 25 | # uncomment to get logging in your browser 26 | # you may have to allow bigger header sizes in your Web server configuration 27 | #firephp: 28 | # type: firephp 29 | # level: info 30 | #chromephp: 31 | # type: chromephp 32 | # level: info 33 | 34 | assetic: 35 | use_controller: true 36 | 37 | #swiftmailer: 38 | # delivery_address: me@example.com 39 | -------------------------------------------------------------------------------- /app/phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | ../src/*/*Bundle/Tests 13 | ../src/*/Bundle/*Bundle/Tests 14 | ../src/*Bundle/Tests 15 | 16 | 17 | 18 | 23 | 24 | 25 | 26 | ../src 27 | 28 | ../src/*Bundle/Resources 29 | ../src/*Bundle/Tests 30 | ../src/*/*Bundle/Resources 31 | ../src/*/*Bundle/Tests 32 | ../src/*/Bundle/*Bundle/Resources 33 | ../src/*/Bundle/*Bundle/Tests 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /app/config/config_dev.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: config.yml } 3 | 4 | framework: 5 | router: 6 | resource: "%kernel.root_dir%/config/routing_dev.yml" 7 | strict_requirements: true 8 | profiler: { only_exceptions: false } 9 | 10 | web_profiler: 11 | toolbar: false 12 | intercept_redirects: false 13 | 14 | monolog: 15 | handlers: 16 | main: 17 | type: stream 18 | path: "%kernel.logs_dir%/%kernel.environment%.log" 19 | level: debug 20 | console: 21 | type: console 22 | bubble: false 23 | verbosity_levels: 24 | VERBOSITY_VERBOSE: INFO 25 | VERBOSITY_VERY_VERBOSE: DEBUG 26 | channels: ["!doctrine"] 27 | console_very_verbose: 28 | type: console 29 | bubble: false 30 | verbosity_levels: 31 | VERBOSITY_VERBOSE: NOTICE 32 | VERBOSITY_VERY_VERBOSE: NOTICE 33 | VERBOSITY_DEBUG: DEBUG 34 | channels: ["doctrine"] 35 | # uncomment to get logging in your browser 36 | # you may have to allow bigger header sizes in your Web server configuration 37 | #firephp: 38 | # type: firephp 39 | # level: info 40 | #chromephp: 41 | # type: chromephp 42 | # level: info 43 | 44 | assetic: 45 | use_controller: true 46 | 47 | #swiftmailer: 48 | # delivery_address: me@example.com 49 | -------------------------------------------------------------------------------- /app/AppKernel.php: -------------------------------------------------------------------------------- 1 | getEnvironment(), array('dev', 'test'))) { 24 | $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); 25 | $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 26 | $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); 27 | $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); 28 | } 29 | 30 | return $bundles; 31 | } 32 | 33 | public function registerContainerConfiguration(LoaderInterface $loader) 34 | { 35 | $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/AppBundle/Controller/DefaultController.php: -------------------------------------------------------------------------------- 1 | get('cache')->fetch('first_deploy'); 18 | $latestDeploy = $this->get('cache')->fetch('latest_deploy'); 19 | $lifeSpan = null; 20 | $pageViews = 0; 21 | 22 | if ($firstDeploy !== false) { 23 | $firstDeploy = $firstDeploy->format('r'); 24 | $lifeSpan = (new Carbon($firstDeploy))->diffForHumans(Carbon::now(), true); 25 | $latestDeploy = $latestDeploy->format('r'); 26 | 27 | // Get doctrine manager 28 | $em = $this->getDoctrine()->getManager(); 29 | 30 | // Write page view to database, the ugly way 31 | $sql = "INSERT INTO page_views SET ip = '" . $this->get('request')->getClientIp() . "'"; 32 | $em->getConnection()->exec($sql); 33 | 34 | // Write page view to database, the ugly way 35 | $sql = "SELECT count(*) as cnt FROM page_views"; 36 | $pageViews = $em->getConnection()->query($sql)->fetchAll(\PDO::FETCH_COLUMN)[0]; 37 | } 38 | 39 | return $this->render('default/index.html.twig', array( 40 | 'first_deploy' => $firstDeploy, 41 | 'latest_deploy' => $latestDeploy, 42 | 'life_span' => $lifeSpan, 43 | 'page_views' => $pageViews, 44 | 'environment' => $this->get('kernel')->getEnvironment(), 45 | )); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deploying-symfony-applications-with-capifony", 3 | "license": "proprietary", 4 | "type": "project", 5 | "autoload": { 6 | "psr-4": { 7 | "": "src/" 8 | } 9 | }, 10 | "require": { 11 | "php": ">=5.3.9", 12 | "symfony/symfony": "2.7.*", 13 | "doctrine/orm": "^2.4.8", 14 | "doctrine/doctrine-bundle": "~1.4", 15 | "symfony/assetic-bundle": "~2.3", 16 | "symfony/swiftmailer-bundle": "~2.3", 17 | "symfony/monolog-bundle": "~2.4", 18 | "sensio/distribution-bundle": "~4.0", 19 | "sensio/framework-extra-bundle": "^3.0.2", 20 | "incenteev/composer-parameter-handler": "~2.0", 21 | "nesbot/carbon": "^1.21", 22 | "doctrine/doctrine-migrations-bundle": "^1.0", 23 | "sensio/generator-bundle": "~2.3" 24 | }, 25 | "scripts": { 26 | "post-install-cmd": [ 27 | "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 28 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", 29 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", 30 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", 31 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", 32 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" 33 | ], 34 | "post-update-cmd": [ 35 | "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 36 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", 37 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", 38 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", 39 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", 40 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" 41 | ] 42 | }, 43 | "config": { 44 | "bin-dir": "bin" 45 | }, 46 | "extra": { 47 | "symfony-app-dir": "app", 48 | "symfony-web-dir": "web", 49 | "symfony-assets-install": "relative", 50 | "incenteev-parameters": { 51 | "file": "app/config/parameters.yml" 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/config/config.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: parameters.yml } 3 | - { resource: security.yml } 4 | - { resource: services.yml } 5 | 6 | # Put parameters here that don't need to change on each machine where the app is deployed 7 | # http://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration 8 | parameters: 9 | locale: en 10 | 11 | framework: 12 | #esi: ~ 13 | #translator: { fallbacks: ["%locale%"] } 14 | secret: "%secret%" 15 | router: 16 | resource: "%kernel.root_dir%/config/routing.yml" 17 | strict_requirements: ~ 18 | form: ~ 19 | csrf_protection: ~ 20 | validation: { enable_annotations: true } 21 | #serializer: { enable_annotations: true } 22 | templating: 23 | engines: ['twig'] 24 | #assets_version: SomeVersionScheme 25 | default_locale: "%locale%" 26 | trusted_hosts: ~ 27 | trusted_proxies: ~ 28 | session: 29 | # handler_id set to null will use default session handler from php.ini 30 | handler_id: ~ 31 | fragments: ~ 32 | http_method_override: true 33 | 34 | # Twig Configuration 35 | twig: 36 | debug: "%kernel.debug%" 37 | strict_variables: "%kernel.debug%" 38 | 39 | # Assetic Configuration 40 | assetic: 41 | debug: "%kernel.debug%" 42 | use_controller: false 43 | bundles: [ ] 44 | #java: /usr/bin/java 45 | filters: 46 | cssrewrite: ~ 47 | #closure: 48 | # jar: "%kernel.root_dir%/Resources/java/compiler.jar" 49 | #yui_css: 50 | # jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar" 51 | 52 | # Doctrine Configuration 53 | doctrine: 54 | dbal: 55 | driver: pdo_mysql 56 | host: "%database_host%" 57 | port: "%database_port%" 58 | dbname: "%database_name%" 59 | user: "%database_user%" 60 | password: "%database_password%" 61 | charset: UTF8 62 | # if using pdo_sqlite as your database driver: 63 | # 1. add the path in parameters.yml 64 | # e.g. database_path: "%kernel.root_dir%/data/data.db3" 65 | # 2. Uncomment database_path in parameters.yml.dist 66 | # 3. Uncomment next line: 67 | # path: "%database_path%" 68 | 69 | orm: 70 | auto_generate_proxy_classes: "%kernel.debug%" 71 | naming_strategy: doctrine.orm.naming_strategy.underscore 72 | auto_mapping: true 73 | 74 | # Swiftmailer Configuration 75 | swiftmailer: 76 | transport: "%mailer_transport%" 77 | host: "%mailer_host%" 78 | username: "%mailer_user%" 79 | password: "%mailer_password%" 80 | spool: { type: memory } 81 | -------------------------------------------------------------------------------- /web/.htaccess: -------------------------------------------------------------------------------- 1 | # Use the front controller as index file. It serves as a fallback solution when 2 | # every other rewrite/redirect fails (e.g. in an aliased environment without 3 | # mod_rewrite). Additionally, this reduces the matching process for the 4 | # start page (path "/") because otherwise Apache will apply the rewriting rules 5 | # to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl). 6 | DirectoryIndex app.php 7 | 8 | # By default, Apache does not evaluate symbolic links if you did not enable this 9 | # feature in your server configuration. Uncomment the following line if you 10 | # install assets as symlinks or if you experience problems related to symlinks 11 | # when compiling LESS/Sass/CoffeScript assets. 12 | # Options FollowSymlinks 13 | 14 | # Disabling MultiViews prevents unwanted negotiation, e.g. "/app" should not resolve 15 | # to the front controller "/app.php" but be rewritten to "/app.php/app". 16 | 17 | Options -MultiViews 18 | 19 | 20 | 21 | RewriteEngine On 22 | 23 | # Determine the RewriteBase automatically and set it as environment variable. 24 | # If you are using Apache aliases to do mass virtual hosting or installed the 25 | # project in a subdirectory, the base path will be prepended to allow proper 26 | # resolution of the app.php file and to redirect to the correct URI. It will 27 | # work in environments without path prefix as well, providing a safe, one-size 28 | # fits all solution. But as you do not need it in this case, you can comment 29 | # the following 2 lines to eliminate the overhead. 30 | RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ 31 | RewriteRule ^(.*) - [E=BASE:%1] 32 | 33 | # Sets the HTTP_AUTHORIZATION header removed by apache 34 | RewriteCond %{HTTP:Authorization} . 35 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 36 | 37 | # Redirect to URI without front controller to prevent duplicate content 38 | # (with and without `/app.php`). Only do this redirect on the initial 39 | # rewrite by Apache and not on subsequent cycles. Otherwise we would get an 40 | # endless redirect loop (request -> rewrite to front controller -> 41 | # redirect -> request -> ...). 42 | # So in case you get a "too many redirects" error or you always get redirected 43 | # to the start page because your Apache does not expose the REDIRECT_STATUS 44 | # environment variable, you have 2 choices: 45 | # - disable this feature by commenting the following 2 lines or 46 | # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the 47 | # following RewriteCond (best solution) 48 | RewriteCond %{ENV:REDIRECT_STATUS} ^$ 49 | RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L] 50 | 51 | # If the requested filename exists, simply serve it. 52 | # We only want to let Apache serve files and not directories. 53 | RewriteCond %{REQUEST_FILENAME} -f 54 | RewriteRule .? - [L] 55 | 56 | # Rewrite all other queries to the front controller. 57 | RewriteRule .? %{ENV:BASE}/app.php [L] 58 | 59 | 60 | 61 | 62 | # When mod_rewrite is not available, we instruct a temporary redirect of 63 | # the start page to the front controller explicitly so that the website 64 | # and the generated links can still be used. 65 | RedirectMatch 302 ^/$ /app.php/ 66 | # RedirectTemp cannot be used instead 67 | 68 | 69 | -------------------------------------------------------------------------------- /app/check.php: -------------------------------------------------------------------------------- 1 | getPhpIniConfigPath(); 8 | 9 | echo_title('Symfony2 Requirements Checker'); 10 | 11 | echo '> PHP is using the following php.ini file:'.PHP_EOL; 12 | if ($iniPath) { 13 | echo_style('green', ' '.$iniPath); 14 | } else { 15 | echo_style('warning', ' WARNING: No configuration file (php.ini) used by PHP!'); 16 | } 17 | 18 | echo PHP_EOL.PHP_EOL; 19 | 20 | echo '> Checking Symfony requirements:'.PHP_EOL.' '; 21 | 22 | $messages = array(); 23 | foreach ($symfonyRequirements->getRequirements() as $req) { 24 | /** @var $req Requirement */ 25 | if ($helpText = get_error_message($req, $lineSize)) { 26 | echo_style('red', 'E'); 27 | $messages['error'][] = $helpText; 28 | } else { 29 | echo_style('green', '.'); 30 | } 31 | } 32 | 33 | $checkPassed = empty($messages['error']); 34 | 35 | foreach ($symfonyRequirements->getRecommendations() as $req) { 36 | if ($helpText = get_error_message($req, $lineSize)) { 37 | echo_style('yellow', 'W'); 38 | $messages['warning'][] = $helpText; 39 | } else { 40 | echo_style('green', '.'); 41 | } 42 | } 43 | 44 | if ($checkPassed) { 45 | echo_block('success', 'OK', 'Your system is ready to run Symfony2 projects'); 46 | } else { 47 | echo_block('error', 'ERROR', 'Your system is not ready to run Symfony2 projects'); 48 | 49 | echo_title('Fix the following mandatory requirements', 'red'); 50 | 51 | foreach ($messages['error'] as $helpText) { 52 | echo ' * '.$helpText.PHP_EOL; 53 | } 54 | } 55 | 56 | if (!empty($messages['warning'])) { 57 | echo_title('Optional recommendations to improve your setup', 'yellow'); 58 | 59 | foreach ($messages['warning'] as $helpText) { 60 | echo ' * '.$helpText.PHP_EOL; 61 | } 62 | } 63 | 64 | echo PHP_EOL; 65 | echo_style('title', 'Note'); 66 | echo ' The command console could use a different php.ini file'.PHP_EOL; 67 | echo_style('title', '~~~~'); 68 | echo ' than the one used with your web server. To be on the'.PHP_EOL; 69 | echo ' safe side, please check the requirements from your web'.PHP_EOL; 70 | echo ' server using the '; 71 | echo_style('yellow', 'web/config.php'); 72 | echo ' script.'.PHP_EOL; 73 | echo PHP_EOL; 74 | 75 | exit($checkPassed ? 0 : 1); 76 | 77 | function get_error_message(Requirement $requirement, $lineSize) 78 | { 79 | if ($requirement->isFulfilled()) { 80 | return; 81 | } 82 | 83 | $errorMessage = wordwrap($requirement->getTestMessage(), $lineSize - 3, PHP_EOL.' ').PHP_EOL; 84 | $errorMessage .= ' > '.wordwrap($requirement->getHelpText(), $lineSize - 5, PHP_EOL.' > ').PHP_EOL; 85 | 86 | return $errorMessage; 87 | } 88 | 89 | function echo_title($title, $style = null) 90 | { 91 | $style = $style ?: 'title'; 92 | 93 | echo PHP_EOL; 94 | echo_style($style, $title.PHP_EOL); 95 | echo_style($style, str_repeat('~', strlen($title)).PHP_EOL); 96 | echo PHP_EOL; 97 | } 98 | 99 | function echo_style($style, $message) 100 | { 101 | // ANSI color codes 102 | $styles = array( 103 | 'reset' => "\033[0m", 104 | 'red' => "\033[31m", 105 | 'green' => "\033[32m", 106 | 'yellow' => "\033[33m", 107 | 'error' => "\033[37;41m", 108 | 'success' => "\033[37;42m", 109 | 'title' => "\033[34m", 110 | ); 111 | $supports = has_color_support(); 112 | 113 | echo($supports ? $styles[$style] : '').$message.($supports ? $styles['reset'] : ''); 114 | } 115 | 116 | function echo_block($style, $title, $message) 117 | { 118 | $message = ' '.trim($message).' '; 119 | $width = strlen($message); 120 | 121 | echo PHP_EOL.PHP_EOL; 122 | 123 | echo_style($style, str_repeat(' ', $width).PHP_EOL); 124 | echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT).PHP_EOL); 125 | echo_style($style, str_pad($message, $width, ' ', STR_PAD_RIGHT).PHP_EOL); 126 | echo_style($style, str_repeat(' ', $width).PHP_EOL); 127 | } 128 | 129 | function has_color_support() 130 | { 131 | static $support; 132 | 133 | if (null === $support) { 134 | if (DIRECTORY_SEPARATOR == '\\') { 135 | $support = false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI'); 136 | } else { 137 | $support = function_exists('posix_isatty') && @posix_isatty(STDOUT); 138 | } 139 | } 140 | 141 | return $support; 142 | } 143 | -------------------------------------------------------------------------------- /web/config.php: -------------------------------------------------------------------------------- 1 | getFailedRequirements(); 20 | $minorProblems = $symfonyRequirements->getFailedRecommendations(); 21 | 22 | ?> 23 | 24 | 25 | 26 | 27 | 28 | Symfony Configuration 29 | 30 | 31 | 32 | 33 | 34 |
35 |
36 | 39 | 40 | 60 |
61 | 62 |
63 |
64 |
65 |

Welcome!

66 |

Welcome to your new Symfony project.

67 |

68 | This script will guide you through the basic configuration of your project. 69 | You can also do the same by editing the ‘app/config/parameters.yml’ file directly. 70 |

71 | 72 | 73 |

Major problems

74 |

Major problems have been detected and must be fixed before continuing:

75 |
    76 | 77 |
  1. getHelpHtml() ?>
  2. 78 | 79 |
80 | 81 | 82 | 83 |

Recommendations

84 |

85 | Additionally, toTo enhance your Symfony experience, 86 | it’s recommended that you fix the following: 87 |

88 |
    89 | 90 |
  1. getHelpHtml() ?>
  2. 91 | 92 |
93 | 94 | 95 | hasPhpIniConfigIssue()): ?> 96 |

* 97 | getPhpIniConfigPath()): ?> 98 | Changes to the php.ini file must be done in "getPhpIniConfigPath() ?>". 99 | 100 | To change settings, create a "php.ini". 101 | 102 |

103 | 104 | 105 | 106 |

Your configuration looks good to run Symfony.

107 | 108 | 109 | 118 |
119 |
120 |
121 |
Symfony Standard Edition
122 |
123 | 124 | 125 | -------------------------------------------------------------------------------- /app/SymfonyRequirements.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | /* 13 | * Users of PHP 5.2 should be able to run the requirements checks. 14 | * This is why the file and all classes must be compatible with PHP 5.2+ 15 | * (e.g. not using namespaces and closures). 16 | * 17 | * ************** CAUTION ************** 18 | * 19 | * DO NOT EDIT THIS FILE as it will be overridden by Composer as part of 20 | * the installation/update process. The original file resides in the 21 | * SensioDistributionBundle. 22 | * 23 | * ************** CAUTION ************** 24 | */ 25 | 26 | /** 27 | * Represents a single PHP requirement, e.g. an installed extension. 28 | * It can be a mandatory requirement or an optional recommendation. 29 | * There is a special subclass, named PhpIniRequirement, to check a php.ini configuration. 30 | * 31 | * @author Tobias Schultze 32 | */ 33 | class Requirement 34 | { 35 | private $fulfilled; 36 | private $testMessage; 37 | private $helpText; 38 | private $helpHtml; 39 | private $optional; 40 | 41 | /** 42 | * Constructor that initializes the requirement. 43 | * 44 | * @param bool $fulfilled Whether the requirement is fulfilled 45 | * @param string $testMessage The message for testing the requirement 46 | * @param string $helpHtml The help text formatted in HTML for resolving the problem 47 | * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) 48 | * @param bool $optional Whether this is only an optional recommendation not a mandatory requirement 49 | */ 50 | public function __construct($fulfilled, $testMessage, $helpHtml, $helpText = null, $optional = false) 51 | { 52 | $this->fulfilled = (bool) $fulfilled; 53 | $this->testMessage = (string) $testMessage; 54 | $this->helpHtml = (string) $helpHtml; 55 | $this->helpText = null === $helpText ? strip_tags($this->helpHtml) : (string) $helpText; 56 | $this->optional = (bool) $optional; 57 | } 58 | 59 | /** 60 | * Returns whether the requirement is fulfilled. 61 | * 62 | * @return bool true if fulfilled, otherwise false 63 | */ 64 | public function isFulfilled() 65 | { 66 | return $this->fulfilled; 67 | } 68 | 69 | /** 70 | * Returns the message for testing the requirement. 71 | * 72 | * @return string The test message 73 | */ 74 | public function getTestMessage() 75 | { 76 | return $this->testMessage; 77 | } 78 | 79 | /** 80 | * Returns the help text for resolving the problem. 81 | * 82 | * @return string The help text 83 | */ 84 | public function getHelpText() 85 | { 86 | return $this->helpText; 87 | } 88 | 89 | /** 90 | * Returns the help text formatted in HTML. 91 | * 92 | * @return string The HTML help 93 | */ 94 | public function getHelpHtml() 95 | { 96 | return $this->helpHtml; 97 | } 98 | 99 | /** 100 | * Returns whether this is only an optional recommendation and not a mandatory requirement. 101 | * 102 | * @return bool true if optional, false if mandatory 103 | */ 104 | public function isOptional() 105 | { 106 | return $this->optional; 107 | } 108 | } 109 | 110 | /** 111 | * Represents a PHP requirement in form of a php.ini configuration. 112 | * 113 | * @author Tobias Schultze 114 | */ 115 | class PhpIniRequirement extends Requirement 116 | { 117 | /** 118 | * Constructor that initializes the requirement. 119 | * 120 | * @param string $cfgName The configuration name used for ini_get() 121 | * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, 122 | * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement 123 | * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. 124 | * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. 125 | * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. 126 | * @param string|null $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) 127 | * @param string|null $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) 128 | * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) 129 | * @param bool $optional Whether this is only an optional recommendation not a mandatory requirement 130 | */ 131 | public function __construct($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null, $optional = false) 132 | { 133 | $cfgValue = ini_get($cfgName); 134 | 135 | if (is_callable($evaluation)) { 136 | if (null === $testMessage || null === $helpHtml) { 137 | throw new InvalidArgumentException('You must provide the parameters testMessage and helpHtml for a callback evaluation.'); 138 | } 139 | 140 | $fulfilled = call_user_func($evaluation, $cfgValue); 141 | } else { 142 | if (null === $testMessage) { 143 | $testMessage = sprintf('%s %s be %s in php.ini', 144 | $cfgName, 145 | $optional ? 'should' : 'must', 146 | $evaluation ? 'enabled' : 'disabled' 147 | ); 148 | } 149 | 150 | if (null === $helpHtml) { 151 | $helpHtml = sprintf('Set %s to %s in php.ini*.', 152 | $cfgName, 153 | $evaluation ? 'on' : 'off' 154 | ); 155 | } 156 | 157 | $fulfilled = $evaluation == $cfgValue; 158 | } 159 | 160 | parent::__construct($fulfilled || ($approveCfgAbsence && false === $cfgValue), $testMessage, $helpHtml, $helpText, $optional); 161 | } 162 | } 163 | 164 | /** 165 | * A RequirementCollection represents a set of Requirement instances. 166 | * 167 | * @author Tobias Schultze 168 | */ 169 | class RequirementCollection implements IteratorAggregate 170 | { 171 | private $requirements = array(); 172 | 173 | /** 174 | * Gets the current RequirementCollection as an Iterator. 175 | * 176 | * @return Traversable A Traversable interface 177 | */ 178 | public function getIterator() 179 | { 180 | return new ArrayIterator($this->requirements); 181 | } 182 | 183 | /** 184 | * Adds a Requirement. 185 | * 186 | * @param Requirement $requirement A Requirement instance 187 | */ 188 | public function add(Requirement $requirement) 189 | { 190 | $this->requirements[] = $requirement; 191 | } 192 | 193 | /** 194 | * Adds a mandatory requirement. 195 | * 196 | * @param bool $fulfilled Whether the requirement is fulfilled 197 | * @param string $testMessage The message for testing the requirement 198 | * @param string $helpHtml The help text formatted in HTML for resolving the problem 199 | * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) 200 | */ 201 | public function addRequirement($fulfilled, $testMessage, $helpHtml, $helpText = null) 202 | { 203 | $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, false)); 204 | } 205 | 206 | /** 207 | * Adds an optional recommendation. 208 | * 209 | * @param bool $fulfilled Whether the recommendation is fulfilled 210 | * @param string $testMessage The message for testing the recommendation 211 | * @param string $helpHtml The help text formatted in HTML for resolving the problem 212 | * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) 213 | */ 214 | public function addRecommendation($fulfilled, $testMessage, $helpHtml, $helpText = null) 215 | { 216 | $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, true)); 217 | } 218 | 219 | /** 220 | * Adds a mandatory requirement in form of a php.ini configuration. 221 | * 222 | * @param string $cfgName The configuration name used for ini_get() 223 | * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, 224 | * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement 225 | * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. 226 | * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. 227 | * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. 228 | * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) 229 | * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) 230 | * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) 231 | */ 232 | public function addPhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null) 233 | { 234 | $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, false)); 235 | } 236 | 237 | /** 238 | * Adds an optional recommendation in form of a php.ini configuration. 239 | * 240 | * @param string $cfgName The configuration name used for ini_get() 241 | * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, 242 | * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement 243 | * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. 244 | * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. 245 | * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. 246 | * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) 247 | * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) 248 | * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) 249 | */ 250 | public function addPhpIniRecommendation($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null) 251 | { 252 | $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, true)); 253 | } 254 | 255 | /** 256 | * Adds a requirement collection to the current set of requirements. 257 | * 258 | * @param RequirementCollection $collection A RequirementCollection instance 259 | */ 260 | public function addCollection(RequirementCollection $collection) 261 | { 262 | $this->requirements = array_merge($this->requirements, $collection->all()); 263 | } 264 | 265 | /** 266 | * Returns both requirements and recommendations. 267 | * 268 | * @return array Array of Requirement instances 269 | */ 270 | public function all() 271 | { 272 | return $this->requirements; 273 | } 274 | 275 | /** 276 | * Returns all mandatory requirements. 277 | * 278 | * @return array Array of Requirement instances 279 | */ 280 | public function getRequirements() 281 | { 282 | $array = array(); 283 | foreach ($this->requirements as $req) { 284 | if (!$req->isOptional()) { 285 | $array[] = $req; 286 | } 287 | } 288 | 289 | return $array; 290 | } 291 | 292 | /** 293 | * Returns the mandatory requirements that were not met. 294 | * 295 | * @return array Array of Requirement instances 296 | */ 297 | public function getFailedRequirements() 298 | { 299 | $array = array(); 300 | foreach ($this->requirements as $req) { 301 | if (!$req->isFulfilled() && !$req->isOptional()) { 302 | $array[] = $req; 303 | } 304 | } 305 | 306 | return $array; 307 | } 308 | 309 | /** 310 | * Returns all optional recommendations. 311 | * 312 | * @return array Array of Requirement instances 313 | */ 314 | public function getRecommendations() 315 | { 316 | $array = array(); 317 | foreach ($this->requirements as $req) { 318 | if ($req->isOptional()) { 319 | $array[] = $req; 320 | } 321 | } 322 | 323 | return $array; 324 | } 325 | 326 | /** 327 | * Returns the recommendations that were not met. 328 | * 329 | * @return array Array of Requirement instances 330 | */ 331 | public function getFailedRecommendations() 332 | { 333 | $array = array(); 334 | foreach ($this->requirements as $req) { 335 | if (!$req->isFulfilled() && $req->isOptional()) { 336 | $array[] = $req; 337 | } 338 | } 339 | 340 | return $array; 341 | } 342 | 343 | /** 344 | * Returns whether a php.ini configuration is not correct. 345 | * 346 | * @return bool php.ini configuration problem? 347 | */ 348 | public function hasPhpIniConfigIssue() 349 | { 350 | foreach ($this->requirements as $req) { 351 | if (!$req->isFulfilled() && $req instanceof PhpIniRequirement) { 352 | return true; 353 | } 354 | } 355 | 356 | return false; 357 | } 358 | 359 | /** 360 | * Returns the PHP configuration file (php.ini) path. 361 | * 362 | * @return string|false php.ini file path 363 | */ 364 | public function getPhpIniConfigPath() 365 | { 366 | return get_cfg_var('cfg_file_path'); 367 | } 368 | } 369 | 370 | /** 371 | * This class specifies all requirements and optional recommendations that 372 | * are necessary to run the Symfony Standard Edition. 373 | * 374 | * @author Tobias Schultze 375 | * @author Fabien Potencier 376 | */ 377 | class SymfonyRequirements extends RequirementCollection 378 | { 379 | const REQUIRED_PHP_VERSION = '5.3.3'; 380 | 381 | /** 382 | * Constructor that initializes the requirements. 383 | */ 384 | public function __construct() 385 | { 386 | /* mandatory requirements follow */ 387 | 388 | $installedPhpVersion = phpversion(); 389 | 390 | $this->addRequirement( 391 | version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>='), 392 | sprintf('PHP version must be at least %s (%s installed)', self::REQUIRED_PHP_VERSION, $installedPhpVersion), 393 | sprintf('You are running PHP version "%s", but Symfony needs at least PHP "%s" to run. 394 | Before using Symfony, upgrade your PHP installation, preferably to the latest version.', 395 | $installedPhpVersion, self::REQUIRED_PHP_VERSION), 396 | sprintf('Install PHP %s or newer (installed version is %s)', self::REQUIRED_PHP_VERSION, $installedPhpVersion) 397 | ); 398 | 399 | $this->addRequirement( 400 | version_compare($installedPhpVersion, '5.3.16', '!='), 401 | 'PHP version must not be 5.3.16 as Symfony won\'t work properly with it', 402 | 'Install PHP 5.3.17 or newer (or downgrade to an earlier PHP version)' 403 | ); 404 | 405 | $this->addRequirement( 406 | is_dir(__DIR__.'/../vendor/composer'), 407 | 'Vendor libraries must be installed', 408 | 'Vendor libraries are missing. Install composer following instructions from http://getcomposer.org/. '. 409 | 'Then run "php composer.phar install" to install them.' 410 | ); 411 | 412 | $cacheDir = is_dir(__DIR__.'/../var/cache') ? __DIR__.'/../var/cache' : __DIR__.'/cache'; 413 | 414 | $this->addRequirement( 415 | is_writable($cacheDir), 416 | 'app/cache/ or var/cache/ directory must be writable', 417 | 'Change the permissions of either "app/cache/" or "var/cache/" directory so that the web server can write into it.' 418 | ); 419 | 420 | $logsDir = is_dir(__DIR__.'/../var/logs') ? __DIR__.'/../var/logs' : __DIR__.'/logs'; 421 | 422 | $this->addRequirement( 423 | is_writable($logsDir), 424 | 'app/logs/ or var/logs/ directory must be writable', 425 | 'Change the permissions of either "app/logs/" or "var/logs/" directory so that the web server can write into it.' 426 | ); 427 | 428 | $this->addPhpIniRequirement( 429 | 'date.timezone', true, false, 430 | 'date.timezone setting must be set', 431 | 'Set the "date.timezone" setting in php.ini* (like Europe/Paris).' 432 | ); 433 | 434 | if (version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>=')) { 435 | $timezones = array(); 436 | foreach (DateTimeZone::listAbbreviations() as $abbreviations) { 437 | foreach ($abbreviations as $abbreviation) { 438 | $timezones[$abbreviation['timezone_id']] = true; 439 | } 440 | } 441 | 442 | $this->addRequirement( 443 | isset($timezones[@date_default_timezone_get()]), 444 | sprintf('Configured default timezone "%s" must be supported by your installation of PHP', @date_default_timezone_get()), 445 | 'Your default timezone is not supported by PHP. Check for typos in your php.ini file and have a look at the list of deprecated timezones at http://php.net/manual/en/timezones.others.php.' 446 | ); 447 | } 448 | 449 | $this->addRequirement( 450 | function_exists('iconv'), 451 | 'iconv() must be available', 452 | 'Install and enable the iconv extension.' 453 | ); 454 | 455 | $this->addRequirement( 456 | function_exists('json_encode'), 457 | 'json_encode() must be available', 458 | 'Install and enable the JSON extension.' 459 | ); 460 | 461 | $this->addRequirement( 462 | function_exists('session_start'), 463 | 'session_start() must be available', 464 | 'Install and enable the session extension.' 465 | ); 466 | 467 | $this->addRequirement( 468 | function_exists('ctype_alpha'), 469 | 'ctype_alpha() must be available', 470 | 'Install and enable the ctype extension.' 471 | ); 472 | 473 | $this->addRequirement( 474 | function_exists('token_get_all'), 475 | 'token_get_all() must be available', 476 | 'Install and enable the Tokenizer extension.' 477 | ); 478 | 479 | $this->addRequirement( 480 | function_exists('simplexml_import_dom'), 481 | 'simplexml_import_dom() must be available', 482 | 'Install and enable the SimpleXML extension.' 483 | ); 484 | 485 | if (function_exists('apc_store') && ini_get('apc.enabled')) { 486 | if (version_compare($installedPhpVersion, '5.4.0', '>=')) { 487 | $this->addRequirement( 488 | version_compare(phpversion('apc'), '3.1.13', '>='), 489 | 'APC version must be at least 3.1.13 when using PHP 5.4', 490 | 'Upgrade your APC extension (3.1.13+).' 491 | ); 492 | } else { 493 | $this->addRequirement( 494 | version_compare(phpversion('apc'), '3.0.17', '>='), 495 | 'APC version must be at least 3.0.17', 496 | 'Upgrade your APC extension (3.0.17+).' 497 | ); 498 | } 499 | } 500 | 501 | $this->addPhpIniRequirement('detect_unicode', false); 502 | 503 | if (extension_loaded('suhosin')) { 504 | $this->addPhpIniRequirement( 505 | 'suhosin.executor.include.whitelist', 506 | create_function('$cfgValue', 'return false !== stripos($cfgValue, "phar");'), 507 | false, 508 | 'suhosin.executor.include.whitelist must be configured correctly in php.ini', 509 | 'Add "phar" to suhosin.executor.include.whitelist in php.ini*.' 510 | ); 511 | } 512 | 513 | if (extension_loaded('xdebug')) { 514 | $this->addPhpIniRequirement( 515 | 'xdebug.show_exception_trace', false, true 516 | ); 517 | 518 | $this->addPhpIniRequirement( 519 | 'xdebug.scream', false, true 520 | ); 521 | 522 | $this->addPhpIniRecommendation( 523 | 'xdebug.max_nesting_level', 524 | create_function('$cfgValue', 'return $cfgValue > 100;'), 525 | true, 526 | 'xdebug.max_nesting_level should be above 100 in php.ini', 527 | 'Set "xdebug.max_nesting_level" to e.g. "250" in php.ini* to stop Xdebug\'s infinite recursion protection erroneously throwing a fatal error in your project.' 528 | ); 529 | } 530 | 531 | $pcreVersion = defined('PCRE_VERSION') ? (float) PCRE_VERSION : null; 532 | 533 | $this->addRequirement( 534 | null !== $pcreVersion, 535 | 'PCRE extension must be available', 536 | 'Install the PCRE extension (version 8.0+).' 537 | ); 538 | 539 | if (extension_loaded('mbstring')) { 540 | $this->addPhpIniRequirement( 541 | 'mbstring.func_overload', 542 | create_function('$cfgValue', 'return (int) $cfgValue === 0;'), 543 | true, 544 | 'string functions should not be overloaded', 545 | 'Set "mbstring.func_overload" to 0 in php.ini* to disable function overloading by the mbstring extension.' 546 | ); 547 | } 548 | 549 | /* optional recommendations follow */ 550 | 551 | if (file_exists(__DIR__.'/../vendor/composer')) { 552 | require_once __DIR__.'/../vendor/autoload.php'; 553 | 554 | try { 555 | $r = new ReflectionClass('Sensio\Bundle\DistributionBundle\SensioDistributionBundle'); 556 | 557 | $contents = file_get_contents(dirname($r->getFileName()).'/Resources/skeleton/app/SymfonyRequirements.php'); 558 | } catch (ReflectionException $e) { 559 | $contents = ''; 560 | } 561 | $this->addRecommendation( 562 | file_get_contents(__FILE__) === $contents, 563 | 'Requirements file should be up-to-date', 564 | 'Your requirements file is outdated. Run composer install and re-check your configuration.' 565 | ); 566 | } 567 | 568 | $this->addRecommendation( 569 | version_compare($installedPhpVersion, '5.3.4', '>='), 570 | 'You should use at least PHP 5.3.4 due to PHP bug #52083 in earlier versions', 571 | 'Your project might malfunction randomly due to PHP bug #52083 ("Notice: Trying to get property of non-object"). Install PHP 5.3.4 or newer.' 572 | ); 573 | 574 | $this->addRecommendation( 575 | version_compare($installedPhpVersion, '5.3.8', '>='), 576 | 'When using annotations you should have at least PHP 5.3.8 due to PHP bug #55156', 577 | 'Install PHP 5.3.8 or newer if your project uses annotations.' 578 | ); 579 | 580 | $this->addRecommendation( 581 | version_compare($installedPhpVersion, '5.4.0', '!='), 582 | 'You should not use PHP 5.4.0 due to the PHP bug #61453', 583 | 'Your project might not work properly due to the PHP bug #61453 ("Cannot dump definitions which have method calls"). Install PHP 5.4.1 or newer.' 584 | ); 585 | 586 | $this->addRecommendation( 587 | version_compare($installedPhpVersion, '5.4.11', '>='), 588 | 'When using the logout handler from the Symfony Security Component, you should have at least PHP 5.4.11 due to PHP bug #63379 (as a workaround, you can also set invalidate_session to false in the security logout handler configuration)', 589 | 'Install PHP 5.4.11 or newer if your project uses the logout handler from the Symfony Security Component.' 590 | ); 591 | 592 | $this->addRecommendation( 593 | (version_compare($installedPhpVersion, '5.3.18', '>=') && version_compare($installedPhpVersion, '5.4.0', '<')) 594 | || 595 | version_compare($installedPhpVersion, '5.4.8', '>='), 596 | 'You should use PHP 5.3.18+ or PHP 5.4.8+ to always get nice error messages for fatal errors in the development environment due to PHP bug #61767/#60909', 597 | 'Install PHP 5.3.18+ or PHP 5.4.8+ if you want nice error messages for all fatal errors in the development environment.' 598 | ); 599 | 600 | if (null !== $pcreVersion) { 601 | $this->addRecommendation( 602 | $pcreVersion >= 8.0, 603 | sprintf('PCRE extension should be at least version 8.0 (%s installed)', $pcreVersion), 604 | 'PCRE 8.0+ is preconfigured in PHP since 5.3.2 but you are using an outdated version of it. Symfony probably works anyway but it is recommended to upgrade your PCRE extension.' 605 | ); 606 | } 607 | 608 | $this->addRecommendation( 609 | class_exists('DomDocument'), 610 | 'PHP-DOM and PHP-XML modules should be installed', 611 | 'Install and enable the PHP-DOM and the PHP-XML modules.' 612 | ); 613 | 614 | $this->addRecommendation( 615 | function_exists('mb_strlen'), 616 | 'mb_strlen() should be available', 617 | 'Install and enable the mbstring extension.' 618 | ); 619 | 620 | $this->addRecommendation( 621 | function_exists('iconv'), 622 | 'iconv() should be available', 623 | 'Install and enable the iconv extension.' 624 | ); 625 | 626 | $this->addRecommendation( 627 | function_exists('utf8_decode'), 628 | 'utf8_decode() should be available', 629 | 'Install and enable the XML extension.' 630 | ); 631 | 632 | $this->addRecommendation( 633 | function_exists('filter_var'), 634 | 'filter_var() should be available', 635 | 'Install and enable the filter extension.' 636 | ); 637 | 638 | if (!defined('PHP_WINDOWS_VERSION_BUILD')) { 639 | $this->addRecommendation( 640 | function_exists('posix_isatty'), 641 | 'posix_isatty() should be available', 642 | 'Install and enable the php_posix extension (used to colorize the CLI output).' 643 | ); 644 | } 645 | 646 | $this->addRecommendation( 647 | extension_loaded('intl'), 648 | 'intl extension should be available', 649 | 'Install and enable the intl extension (used for validators).' 650 | ); 651 | 652 | if (extension_loaded('intl')) { 653 | // in some WAMP server installations, new Collator() returns null 654 | $this->addRecommendation( 655 | null !== new Collator('fr_FR'), 656 | 'intl extension should be correctly configured', 657 | 'The intl extension does not behave properly. This problem is typical on PHP 5.3.X x64 WIN builds.' 658 | ); 659 | 660 | // check for compatible ICU versions (only done when you have the intl extension) 661 | if (defined('INTL_ICU_VERSION')) { 662 | $version = INTL_ICU_VERSION; 663 | } else { 664 | $reflector = new ReflectionExtension('intl'); 665 | 666 | ob_start(); 667 | $reflector->info(); 668 | $output = strip_tags(ob_get_clean()); 669 | 670 | preg_match('/^ICU version +(?:=> )?(.*)$/m', $output, $matches); 671 | $version = $matches[1]; 672 | } 673 | 674 | $this->addRecommendation( 675 | version_compare($version, '4.0', '>='), 676 | 'intl ICU version should be at least 4+', 677 | 'Upgrade your intl extension with a newer ICU version (4+).' 678 | ); 679 | 680 | $this->addPhpIniRecommendation( 681 | 'intl.error_level', 682 | create_function('$cfgValue', 'return (int) $cfgValue === 0;'), 683 | true, 684 | 'intl.error_level should be 0 in php.ini', 685 | 'Set "intl.error_level" to "0" in php.ini* to inhibit the messages when an error occurs in ICU functions.' 686 | ); 687 | } 688 | 689 | $accelerator = 690 | (extension_loaded('eaccelerator') && ini_get('eaccelerator.enable')) 691 | || 692 | (extension_loaded('apc') && ini_get('apc.enabled')) 693 | || 694 | (extension_loaded('Zend Optimizer+') && ini_get('zend_optimizerplus.enable')) 695 | || 696 | (extension_loaded('Zend OPcache') && ini_get('opcache.enable')) 697 | || 698 | (extension_loaded('xcache') && ini_get('xcache.cacher')) 699 | || 700 | (extension_loaded('wincache') && ini_get('wincache.ocenabled')) 701 | ; 702 | 703 | $this->addRecommendation( 704 | $accelerator, 705 | 'a PHP accelerator should be installed', 706 | 'Install and/or enable a PHP accelerator (highly recommended).' 707 | ); 708 | 709 | if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { 710 | $this->addRecommendation( 711 | $this->getRealpathCacheSize() > 1000, 712 | 'realpath_cache_size should be above 1024 in php.ini', 713 | 'Set "realpath_cache_size" to e.g. "1024" in php.ini* to improve performance on windows.' 714 | ); 715 | } 716 | 717 | $this->addPhpIniRecommendation('short_open_tag', false); 718 | 719 | $this->addPhpIniRecommendation('magic_quotes_gpc', false, true); 720 | 721 | $this->addPhpIniRecommendation('register_globals', false, true); 722 | 723 | $this->addPhpIniRecommendation('session.auto_start', false); 724 | 725 | $this->addRecommendation( 726 | class_exists('PDO'), 727 | 'PDO should be installed', 728 | 'Install PDO (mandatory for Doctrine).' 729 | ); 730 | 731 | if (class_exists('PDO')) { 732 | $drivers = PDO::getAvailableDrivers(); 733 | $this->addRecommendation( 734 | count($drivers) > 0, 735 | sprintf('PDO should have some drivers installed (currently available: %s)', count($drivers) ? implode(', ', $drivers) : 'none'), 736 | 'Install PDO drivers (mandatory for Doctrine).' 737 | ); 738 | } 739 | } 740 | 741 | /** 742 | * Loads realpath_cache_size from php.ini and converts it to int. 743 | * 744 | * (e.g. 16k is converted to 16384 int) 745 | * 746 | * @return int 747 | */ 748 | protected function getRealpathCacheSize() 749 | { 750 | $size = ini_get('realpath_cache_size'); 751 | $size = trim($size); 752 | $unit = strtolower(substr($size, -1, 1)); 753 | switch ($unit) { 754 | case 'g': 755 | return $size * 1024 * 1024 * 1024; 756 | case 'm': 757 | return $size * 1024 * 1024; 758 | case 'k': 759 | return $size * 1024; 760 | default: 761 | return (int) $size; 762 | } 763 | } 764 | } 765 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "3399911672afab162719ff3dbdf740c9", 8 | "content-hash": "7a58b33f8e12559ca5a1eecfba1f109e", 9 | "packages": [ 10 | { 11 | "name": "doctrine/annotations", 12 | "version": "v1.2.7", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/doctrine/annotations.git", 16 | "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/f25c8aab83e0c3e976fd7d19875f198ccf2f7535", 21 | "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "doctrine/lexer": "1.*", 26 | "php": ">=5.3.2" 27 | }, 28 | "require-dev": { 29 | "doctrine/cache": "1.*", 30 | "phpunit/phpunit": "4.*" 31 | }, 32 | "type": "library", 33 | "extra": { 34 | "branch-alias": { 35 | "dev-master": "1.3.x-dev" 36 | } 37 | }, 38 | "autoload": { 39 | "psr-0": { 40 | "Doctrine\\Common\\Annotations\\": "lib/" 41 | } 42 | }, 43 | "notification-url": "https://packagist.org/downloads/", 44 | "license": [ 45 | "MIT" 46 | ], 47 | "authors": [ 48 | { 49 | "name": "Roman Borschel", 50 | "email": "roman@code-factory.org" 51 | }, 52 | { 53 | "name": "Benjamin Eberlei", 54 | "email": "kontakt@beberlei.de" 55 | }, 56 | { 57 | "name": "Guilherme Blanco", 58 | "email": "guilhermeblanco@gmail.com" 59 | }, 60 | { 61 | "name": "Jonathan Wage", 62 | "email": "jonwage@gmail.com" 63 | }, 64 | { 65 | "name": "Johannes Schmitt", 66 | "email": "schmittjoh@gmail.com" 67 | } 68 | ], 69 | "description": "Docblock Annotations Parser", 70 | "homepage": "http://www.doctrine-project.org", 71 | "keywords": [ 72 | "annotations", 73 | "docblock", 74 | "parser" 75 | ], 76 | "time": "2015-08-31 12:32:49" 77 | }, 78 | { 79 | "name": "doctrine/cache", 80 | "version": "v1.5.1", 81 | "source": { 82 | "type": "git", 83 | "url": "https://github.com/doctrine/cache.git", 84 | "reference": "2b9cec5a5e722010cbebc91713d4c11eaa064d5e" 85 | }, 86 | "dist": { 87 | "type": "zip", 88 | "url": "https://api.github.com/repos/doctrine/cache/zipball/2b9cec5a5e722010cbebc91713d4c11eaa064d5e", 89 | "reference": "2b9cec5a5e722010cbebc91713d4c11eaa064d5e", 90 | "shasum": "" 91 | }, 92 | "require": { 93 | "php": ">=5.3.2" 94 | }, 95 | "conflict": { 96 | "doctrine/common": ">2.2,<2.4" 97 | }, 98 | "require-dev": { 99 | "phpunit/phpunit": ">=3.7", 100 | "predis/predis": "~1.0", 101 | "satooshi/php-coveralls": "~0.6" 102 | }, 103 | "type": "library", 104 | "extra": { 105 | "branch-alias": { 106 | "dev-master": "1.5.x-dev" 107 | } 108 | }, 109 | "autoload": { 110 | "psr-4": { 111 | "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" 112 | } 113 | }, 114 | "notification-url": "https://packagist.org/downloads/", 115 | "license": [ 116 | "MIT" 117 | ], 118 | "authors": [ 119 | { 120 | "name": "Roman Borschel", 121 | "email": "roman@code-factory.org" 122 | }, 123 | { 124 | "name": "Benjamin Eberlei", 125 | "email": "kontakt@beberlei.de" 126 | }, 127 | { 128 | "name": "Guilherme Blanco", 129 | "email": "guilhermeblanco@gmail.com" 130 | }, 131 | { 132 | "name": "Jonathan Wage", 133 | "email": "jonwage@gmail.com" 134 | }, 135 | { 136 | "name": "Johannes Schmitt", 137 | "email": "schmittjoh@gmail.com" 138 | } 139 | ], 140 | "description": "Caching library offering an object-oriented API for many cache backends", 141 | "homepage": "http://www.doctrine-project.org", 142 | "keywords": [ 143 | "cache", 144 | "caching" 145 | ], 146 | "time": "2015-11-02 18:35:48" 147 | }, 148 | { 149 | "name": "doctrine/collections", 150 | "version": "v1.3.0", 151 | "source": { 152 | "type": "git", 153 | "url": "https://github.com/doctrine/collections.git", 154 | "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a" 155 | }, 156 | "dist": { 157 | "type": "zip", 158 | "url": "https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a", 159 | "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a", 160 | "shasum": "" 161 | }, 162 | "require": { 163 | "php": ">=5.3.2" 164 | }, 165 | "require-dev": { 166 | "phpunit/phpunit": "~4.0" 167 | }, 168 | "type": "library", 169 | "extra": { 170 | "branch-alias": { 171 | "dev-master": "1.2.x-dev" 172 | } 173 | }, 174 | "autoload": { 175 | "psr-0": { 176 | "Doctrine\\Common\\Collections\\": "lib/" 177 | } 178 | }, 179 | "notification-url": "https://packagist.org/downloads/", 180 | "license": [ 181 | "MIT" 182 | ], 183 | "authors": [ 184 | { 185 | "name": "Roman Borschel", 186 | "email": "roman@code-factory.org" 187 | }, 188 | { 189 | "name": "Benjamin Eberlei", 190 | "email": "kontakt@beberlei.de" 191 | }, 192 | { 193 | "name": "Guilherme Blanco", 194 | "email": "guilhermeblanco@gmail.com" 195 | }, 196 | { 197 | "name": "Jonathan Wage", 198 | "email": "jonwage@gmail.com" 199 | }, 200 | { 201 | "name": "Johannes Schmitt", 202 | "email": "schmittjoh@gmail.com" 203 | } 204 | ], 205 | "description": "Collections Abstraction library", 206 | "homepage": "http://www.doctrine-project.org", 207 | "keywords": [ 208 | "array", 209 | "collections", 210 | "iterator" 211 | ], 212 | "time": "2015-04-14 22:21:58" 213 | }, 214 | { 215 | "name": "doctrine/common", 216 | "version": "v2.5.1", 217 | "source": { 218 | "type": "git", 219 | "url": "https://github.com/doctrine/common.git", 220 | "reference": "0009b8f0d4a917aabc971fb089eba80e872f83f9" 221 | }, 222 | "dist": { 223 | "type": "zip", 224 | "url": "https://api.github.com/repos/doctrine/common/zipball/0009b8f0d4a917aabc971fb089eba80e872f83f9", 225 | "reference": "0009b8f0d4a917aabc971fb089eba80e872f83f9", 226 | "shasum": "" 227 | }, 228 | "require": { 229 | "doctrine/annotations": "1.*", 230 | "doctrine/cache": "1.*", 231 | "doctrine/collections": "1.*", 232 | "doctrine/inflector": "1.*", 233 | "doctrine/lexer": "1.*", 234 | "php": ">=5.3.2" 235 | }, 236 | "require-dev": { 237 | "phpunit/phpunit": "~3.7" 238 | }, 239 | "type": "library", 240 | "extra": { 241 | "branch-alias": { 242 | "dev-master": "2.6.x-dev" 243 | } 244 | }, 245 | "autoload": { 246 | "psr-0": { 247 | "Doctrine\\Common\\": "lib/" 248 | } 249 | }, 250 | "notification-url": "https://packagist.org/downloads/", 251 | "license": [ 252 | "MIT" 253 | ], 254 | "authors": [ 255 | { 256 | "name": "Roman Borschel", 257 | "email": "roman@code-factory.org" 258 | }, 259 | { 260 | "name": "Benjamin Eberlei", 261 | "email": "kontakt@beberlei.de" 262 | }, 263 | { 264 | "name": "Guilherme Blanco", 265 | "email": "guilhermeblanco@gmail.com" 266 | }, 267 | { 268 | "name": "Jonathan Wage", 269 | "email": "jonwage@gmail.com" 270 | }, 271 | { 272 | "name": "Johannes Schmitt", 273 | "email": "schmittjoh@gmail.com" 274 | } 275 | ], 276 | "description": "Common Library for Doctrine projects", 277 | "homepage": "http://www.doctrine-project.org", 278 | "keywords": [ 279 | "annotations", 280 | "collections", 281 | "eventmanager", 282 | "persistence", 283 | "spl" 284 | ], 285 | "time": "2015-08-31 13:00:22" 286 | }, 287 | { 288 | "name": "doctrine/dbal", 289 | "version": "v2.5.2", 290 | "source": { 291 | "type": "git", 292 | "url": "https://github.com/doctrine/dbal.git", 293 | "reference": "01dbcbc5cd0a913d751418e635434a18a2f2a75c" 294 | }, 295 | "dist": { 296 | "type": "zip", 297 | "url": "https://api.github.com/repos/doctrine/dbal/zipball/01dbcbc5cd0a913d751418e635434a18a2f2a75c", 298 | "reference": "01dbcbc5cd0a913d751418e635434a18a2f2a75c", 299 | "shasum": "" 300 | }, 301 | "require": { 302 | "doctrine/common": ">=2.4,<2.6-dev", 303 | "php": ">=5.3.2" 304 | }, 305 | "require-dev": { 306 | "phpunit/phpunit": "4.*", 307 | "symfony/console": "2.*" 308 | }, 309 | "suggest": { 310 | "symfony/console": "For helpful console commands such as SQL execution and import of files." 311 | }, 312 | "bin": [ 313 | "bin/doctrine-dbal" 314 | ], 315 | "type": "library", 316 | "extra": { 317 | "branch-alias": { 318 | "dev-master": "2.5.x-dev" 319 | } 320 | }, 321 | "autoload": { 322 | "psr-0": { 323 | "Doctrine\\DBAL\\": "lib/" 324 | } 325 | }, 326 | "notification-url": "https://packagist.org/downloads/", 327 | "license": [ 328 | "MIT" 329 | ], 330 | "authors": [ 331 | { 332 | "name": "Roman Borschel", 333 | "email": "roman@code-factory.org" 334 | }, 335 | { 336 | "name": "Benjamin Eberlei", 337 | "email": "kontakt@beberlei.de" 338 | }, 339 | { 340 | "name": "Guilherme Blanco", 341 | "email": "guilhermeblanco@gmail.com" 342 | }, 343 | { 344 | "name": "Jonathan Wage", 345 | "email": "jonwage@gmail.com" 346 | } 347 | ], 348 | "description": "Database Abstraction Layer", 349 | "homepage": "http://www.doctrine-project.org", 350 | "keywords": [ 351 | "database", 352 | "dbal", 353 | "persistence", 354 | "queryobject" 355 | ], 356 | "time": "2015-09-16 16:29:33" 357 | }, 358 | { 359 | "name": "doctrine/doctrine-bundle", 360 | "version": "1.6.0", 361 | "source": { 362 | "type": "git", 363 | "url": "https://github.com/doctrine/DoctrineBundle.git", 364 | "reference": "a5b3ba908ba68f3e14e42762a7b940fde65ed7da" 365 | }, 366 | "dist": { 367 | "type": "zip", 368 | "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/a5b3ba908ba68f3e14e42762a7b940fde65ed7da", 369 | "reference": "a5b3ba908ba68f3e14e42762a7b940fde65ed7da", 370 | "shasum": "" 371 | }, 372 | "require": { 373 | "doctrine/dbal": "~2.3", 374 | "doctrine/doctrine-cache-bundle": "~1.0", 375 | "jdorn/sql-formatter": "~1.1", 376 | "php": ">=5.3.2", 377 | "symfony/console": "~2.3|~3.0", 378 | "symfony/doctrine-bridge": "~2.2|~3.0", 379 | "symfony/framework-bundle": "~2.3|~3.0" 380 | }, 381 | "require-dev": { 382 | "doctrine/orm": "~2.3", 383 | "phpunit/phpunit": "~4", 384 | "satooshi/php-coveralls": "~0.6.1", 385 | "symfony/validator": "~2.2|~3.0", 386 | "symfony/yaml": "~2.2|~3.0", 387 | "twig/twig": "~1.10" 388 | }, 389 | "suggest": { 390 | "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", 391 | "symfony/web-profiler-bundle": "to use the data collector" 392 | }, 393 | "type": "symfony-bundle", 394 | "extra": { 395 | "branch-alias": { 396 | "dev-master": "1.6.x-dev" 397 | } 398 | }, 399 | "autoload": { 400 | "psr-4": { 401 | "Doctrine\\Bundle\\DoctrineBundle\\": "" 402 | } 403 | }, 404 | "notification-url": "https://packagist.org/downloads/", 405 | "license": [ 406 | "MIT" 407 | ], 408 | "authors": [ 409 | { 410 | "name": "Symfony Community", 411 | "homepage": "http://symfony.com/contributors" 412 | }, 413 | { 414 | "name": "Benjamin Eberlei", 415 | "email": "kontakt@beberlei.de" 416 | }, 417 | { 418 | "name": "Doctrine Project", 419 | "homepage": "http://www.doctrine-project.org/" 420 | }, 421 | { 422 | "name": "Fabien Potencier", 423 | "email": "fabien@symfony.com" 424 | } 425 | ], 426 | "description": "Symfony DoctrineBundle", 427 | "homepage": "http://www.doctrine-project.org", 428 | "keywords": [ 429 | "database", 430 | "dbal", 431 | "orm", 432 | "persistence" 433 | ], 434 | "time": "2015-11-04 21:33:02" 435 | }, 436 | { 437 | "name": "doctrine/doctrine-cache-bundle", 438 | "version": "1.2.1", 439 | "source": { 440 | "type": "git", 441 | "url": "https://github.com/doctrine/DoctrineCacheBundle.git", 442 | "reference": "3233bc78e222d528ca89a6a47d48d6f37888e95e" 443 | }, 444 | "dist": { 445 | "type": "zip", 446 | "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/3233bc78e222d528ca89a6a47d48d6f37888e95e", 447 | "reference": "3233bc78e222d528ca89a6a47d48d6f37888e95e", 448 | "shasum": "" 449 | }, 450 | "require": { 451 | "doctrine/cache": "^1.4.2", 452 | "doctrine/inflector": "~1.0", 453 | "php": ">=5.3.2", 454 | "symfony/doctrine-bridge": "~2.2|~3.0", 455 | "symfony/security-acl": "~2.3|~3.0" 456 | }, 457 | "require-dev": { 458 | "instaclick/coding-standard": "~1.1", 459 | "instaclick/object-calisthenics-sniffs": "dev-master", 460 | "instaclick/symfony2-coding-standard": "dev-remaster", 461 | "phpunit/phpunit": "~4", 462 | "satooshi/php-coveralls": "~0.6.1", 463 | "squizlabs/php_codesniffer": "~1.5", 464 | "symfony/console": "~2.2|~3.0", 465 | "symfony/finder": "~2.2|~3.0", 466 | "symfony/framework-bundle": "~2.2|~3.0", 467 | "symfony/phpunit-bridge": "~2.7|~3.0", 468 | "symfony/validator": "~2.2|~3.0", 469 | "symfony/yaml": "~2.2|~3.0" 470 | }, 471 | "type": "symfony-bundle", 472 | "extra": { 473 | "branch-alias": { 474 | "dev-master": "1.0.x-dev" 475 | } 476 | }, 477 | "autoload": { 478 | "psr-4": { 479 | "Doctrine\\Bundle\\DoctrineCacheBundle\\": "" 480 | } 481 | }, 482 | "notification-url": "https://packagist.org/downloads/", 483 | "license": [ 484 | "MIT" 485 | ], 486 | "authors": [ 487 | { 488 | "name": "Symfony Community", 489 | "homepage": "http://symfony.com/contributors" 490 | }, 491 | { 492 | "name": "Benjamin Eberlei", 493 | "email": "kontakt@beberlei.de" 494 | }, 495 | { 496 | "name": "Fabio B. Silva", 497 | "email": "fabio.bat.silva@gmail.com" 498 | }, 499 | { 500 | "name": "Guilherme Blanco", 501 | "email": "guilhermeblanco@hotmail.com" 502 | }, 503 | { 504 | "name": "Doctrine Project", 505 | "homepage": "http://www.doctrine-project.org/" 506 | }, 507 | { 508 | "name": "Fabien Potencier", 509 | "email": "fabien@symfony.com" 510 | } 511 | ], 512 | "description": "Symfony Bundle for Doctrine Cache", 513 | "homepage": "http://www.doctrine-project.org", 514 | "keywords": [ 515 | "cache", 516 | "caching" 517 | ], 518 | "time": "2015-11-05 13:48:27" 519 | }, 520 | { 521 | "name": "doctrine/doctrine-migrations-bundle", 522 | "version": "1.1.1", 523 | "source": { 524 | "type": "git", 525 | "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", 526 | "reference": "303a576e2124efb07ec215e34ea2480b841cf5e4" 527 | }, 528 | "dist": { 529 | "type": "zip", 530 | "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/303a576e2124efb07ec215e34ea2480b841cf5e4", 531 | "reference": "303a576e2124efb07ec215e34ea2480b841cf5e4", 532 | "shasum": "" 533 | }, 534 | "require": { 535 | "doctrine/doctrine-bundle": "~1.0", 536 | "doctrine/migrations": "~1.0", 537 | "php": ">=5.3.2", 538 | "symfony/framework-bundle": "~2.3|~3.0" 539 | }, 540 | "type": "symfony-bundle", 541 | "extra": { 542 | "branch-alias": { 543 | "dev-master": "1.1-dev" 544 | } 545 | }, 546 | "autoload": { 547 | "psr-4": { 548 | "Doctrine\\Bundle\\MigrationsBundle\\": "" 549 | } 550 | }, 551 | "notification-url": "https://packagist.org/downloads/", 552 | "license": [ 553 | "MIT" 554 | ], 555 | "authors": [ 556 | { 557 | "name": "Symfony Community", 558 | "homepage": "http://symfony.com/contributors" 559 | }, 560 | { 561 | "name": "Doctrine Project", 562 | "homepage": "http://www.doctrine-project.org" 563 | }, 564 | { 565 | "name": "Fabien Potencier", 566 | "email": "fabien@symfony.com" 567 | } 568 | ], 569 | "description": "Symfony DoctrineMigrationsBundle", 570 | "homepage": "http://www.doctrine-project.org", 571 | "keywords": [ 572 | "dbal", 573 | "migrations", 574 | "schema" 575 | ], 576 | "time": "2015-11-04 13:45:30" 577 | }, 578 | { 579 | "name": "doctrine/inflector", 580 | "version": "v1.1.0", 581 | "source": { 582 | "type": "git", 583 | "url": "https://github.com/doctrine/inflector.git", 584 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" 585 | }, 586 | "dist": { 587 | "type": "zip", 588 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", 589 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", 590 | "shasum": "" 591 | }, 592 | "require": { 593 | "php": ">=5.3.2" 594 | }, 595 | "require-dev": { 596 | "phpunit/phpunit": "4.*" 597 | }, 598 | "type": "library", 599 | "extra": { 600 | "branch-alias": { 601 | "dev-master": "1.1.x-dev" 602 | } 603 | }, 604 | "autoload": { 605 | "psr-0": { 606 | "Doctrine\\Common\\Inflector\\": "lib/" 607 | } 608 | }, 609 | "notification-url": "https://packagist.org/downloads/", 610 | "license": [ 611 | "MIT" 612 | ], 613 | "authors": [ 614 | { 615 | "name": "Roman Borschel", 616 | "email": "roman@code-factory.org" 617 | }, 618 | { 619 | "name": "Benjamin Eberlei", 620 | "email": "kontakt@beberlei.de" 621 | }, 622 | { 623 | "name": "Guilherme Blanco", 624 | "email": "guilhermeblanco@gmail.com" 625 | }, 626 | { 627 | "name": "Jonathan Wage", 628 | "email": "jonwage@gmail.com" 629 | }, 630 | { 631 | "name": "Johannes Schmitt", 632 | "email": "schmittjoh@gmail.com" 633 | } 634 | ], 635 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 636 | "homepage": "http://www.doctrine-project.org", 637 | "keywords": [ 638 | "inflection", 639 | "pluralize", 640 | "singularize", 641 | "string" 642 | ], 643 | "time": "2015-11-06 14:35:42" 644 | }, 645 | { 646 | "name": "doctrine/instantiator", 647 | "version": "1.0.5", 648 | "source": { 649 | "type": "git", 650 | "url": "https://github.com/doctrine/instantiator.git", 651 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" 652 | }, 653 | "dist": { 654 | "type": "zip", 655 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", 656 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", 657 | "shasum": "" 658 | }, 659 | "require": { 660 | "php": ">=5.3,<8.0-DEV" 661 | }, 662 | "require-dev": { 663 | "athletic/athletic": "~0.1.8", 664 | "ext-pdo": "*", 665 | "ext-phar": "*", 666 | "phpunit/phpunit": "~4.0", 667 | "squizlabs/php_codesniffer": "~2.0" 668 | }, 669 | "type": "library", 670 | "extra": { 671 | "branch-alias": { 672 | "dev-master": "1.0.x-dev" 673 | } 674 | }, 675 | "autoload": { 676 | "psr-4": { 677 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 678 | } 679 | }, 680 | "notification-url": "https://packagist.org/downloads/", 681 | "license": [ 682 | "MIT" 683 | ], 684 | "authors": [ 685 | { 686 | "name": "Marco Pivetta", 687 | "email": "ocramius@gmail.com", 688 | "homepage": "http://ocramius.github.com/" 689 | } 690 | ], 691 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 692 | "homepage": "https://github.com/doctrine/instantiator", 693 | "keywords": [ 694 | "constructor", 695 | "instantiate" 696 | ], 697 | "time": "2015-06-14 21:17:01" 698 | }, 699 | { 700 | "name": "doctrine/lexer", 701 | "version": "v1.0.1", 702 | "source": { 703 | "type": "git", 704 | "url": "https://github.com/doctrine/lexer.git", 705 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" 706 | }, 707 | "dist": { 708 | "type": "zip", 709 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", 710 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", 711 | "shasum": "" 712 | }, 713 | "require": { 714 | "php": ">=5.3.2" 715 | }, 716 | "type": "library", 717 | "extra": { 718 | "branch-alias": { 719 | "dev-master": "1.0.x-dev" 720 | } 721 | }, 722 | "autoload": { 723 | "psr-0": { 724 | "Doctrine\\Common\\Lexer\\": "lib/" 725 | } 726 | }, 727 | "notification-url": "https://packagist.org/downloads/", 728 | "license": [ 729 | "MIT" 730 | ], 731 | "authors": [ 732 | { 733 | "name": "Roman Borschel", 734 | "email": "roman@code-factory.org" 735 | }, 736 | { 737 | "name": "Guilherme Blanco", 738 | "email": "guilhermeblanco@gmail.com" 739 | }, 740 | { 741 | "name": "Johannes Schmitt", 742 | "email": "schmittjoh@gmail.com" 743 | } 744 | ], 745 | "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", 746 | "homepage": "http://www.doctrine-project.org", 747 | "keywords": [ 748 | "lexer", 749 | "parser" 750 | ], 751 | "time": "2014-09-09 13:34:57" 752 | }, 753 | { 754 | "name": "doctrine/migrations", 755 | "version": "v1.1.0", 756 | "source": { 757 | "type": "git", 758 | "url": "https://github.com/doctrine/migrations.git", 759 | "reference": "d196ddc229f50c66c5a015c158adb78a2dfb4351" 760 | }, 761 | "dist": { 762 | "type": "zip", 763 | "url": "https://api.github.com/repos/doctrine/migrations/zipball/d196ddc229f50c66c5a015c158adb78a2dfb4351", 764 | "reference": "d196ddc229f50c66c5a015c158adb78a2dfb4351", 765 | "shasum": "" 766 | }, 767 | "require": { 768 | "doctrine/dbal": "~2.2", 769 | "php": ">=5.4.0", 770 | "symfony/console": "~2.3", 771 | "symfony/yaml": "~2.3" 772 | }, 773 | "require-dev": { 774 | "doctrine/coding-standard": "dev-master", 775 | "doctrine/orm": "2.*", 776 | "johnkary/phpunit-speedtrap": "~1.0@dev", 777 | "mockery/mockery": "^0.9.4", 778 | "phpunit/phpunit": "~4.7", 779 | "satooshi/php-coveralls": "0.6.*" 780 | }, 781 | "suggest": { 782 | "symfony/console": "to run the migration from the console" 783 | }, 784 | "bin": [ 785 | "bin/doctrine-migrations" 786 | ], 787 | "type": "library", 788 | "extra": { 789 | "branch-alias": { 790 | "dev-master": "v1.1.x-dev" 791 | } 792 | }, 793 | "autoload": { 794 | "psr-4": { 795 | "Doctrine\\DBAL\\Migrations\\": "lib/Doctrine/DBAL/Migrations" 796 | } 797 | }, 798 | "notification-url": "https://packagist.org/downloads/", 799 | "license": [ 800 | "LGPL-2.1" 801 | ], 802 | "authors": [ 803 | { 804 | "name": "Benjamin Eberlei", 805 | "email": "kontakt@beberlei.de" 806 | }, 807 | { 808 | "name": "Jonathan Wage", 809 | "email": "jonwage@gmail.com" 810 | } 811 | ], 812 | "description": "Database Schema migrations using Doctrine DBAL", 813 | "homepage": "http://www.doctrine-project.org", 814 | "keywords": [ 815 | "database", 816 | "migrations" 817 | ], 818 | "time": "2015-09-29 11:13:06" 819 | }, 820 | { 821 | "name": "doctrine/orm", 822 | "version": "v2.5.1", 823 | "source": { 824 | "type": "git", 825 | "url": "https://github.com/doctrine/doctrine2.git", 826 | "reference": "e6a83bedbe67579cb0bfb688e982e617943a2945" 827 | }, 828 | "dist": { 829 | "type": "zip", 830 | "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/e6a83bedbe67579cb0bfb688e982e617943a2945", 831 | "reference": "e6a83bedbe67579cb0bfb688e982e617943a2945", 832 | "shasum": "" 833 | }, 834 | "require": { 835 | "doctrine/cache": "~1.4", 836 | "doctrine/collections": "~1.2", 837 | "doctrine/common": ">=2.5-dev,<2.6-dev", 838 | "doctrine/dbal": ">=2.5-dev,<2.6-dev", 839 | "doctrine/instantiator": "~1.0.1", 840 | "ext-pdo": "*", 841 | "php": ">=5.4", 842 | "symfony/console": "~2.5" 843 | }, 844 | "require-dev": { 845 | "phpunit/phpunit": "~4.0", 846 | "satooshi/php-coveralls": "dev-master", 847 | "symfony/yaml": "~2.1" 848 | }, 849 | "suggest": { 850 | "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" 851 | }, 852 | "bin": [ 853 | "bin/doctrine", 854 | "bin/doctrine.php" 855 | ], 856 | "type": "library", 857 | "extra": { 858 | "branch-alias": { 859 | "dev-master": "2.6.x-dev" 860 | } 861 | }, 862 | "autoload": { 863 | "psr-0": { 864 | "Doctrine\\ORM\\": "lib/" 865 | } 866 | }, 867 | "notification-url": "https://packagist.org/downloads/", 868 | "license": [ 869 | "MIT" 870 | ], 871 | "authors": [ 872 | { 873 | "name": "Roman Borschel", 874 | "email": "roman@code-factory.org" 875 | }, 876 | { 877 | "name": "Benjamin Eberlei", 878 | "email": "kontakt@beberlei.de" 879 | }, 880 | { 881 | "name": "Guilherme Blanco", 882 | "email": "guilhermeblanco@gmail.com" 883 | }, 884 | { 885 | "name": "Jonathan Wage", 886 | "email": "jonwage@gmail.com" 887 | } 888 | ], 889 | "description": "Object-Relational-Mapper for PHP", 890 | "homepage": "http://www.doctrine-project.org", 891 | "keywords": [ 892 | "database", 893 | "orm" 894 | ], 895 | "time": "2015-08-31 12:59:39" 896 | }, 897 | { 898 | "name": "incenteev/composer-parameter-handler", 899 | "version": "v2.1.2", 900 | "source": { 901 | "type": "git", 902 | "url": "https://github.com/Incenteev/ParameterHandler.git", 903 | "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc" 904 | }, 905 | "dist": { 906 | "type": "zip", 907 | "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc", 908 | "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc", 909 | "shasum": "" 910 | }, 911 | "require": { 912 | "php": ">=5.3.3", 913 | "symfony/yaml": "~2.3|~3.0" 914 | }, 915 | "require-dev": { 916 | "composer/composer": "1.0.*@dev", 917 | "phpspec/prophecy-phpunit": "~1.0", 918 | "symfony/filesystem": "~2.2" 919 | }, 920 | "type": "library", 921 | "extra": { 922 | "branch-alias": { 923 | "dev-master": "2.1.x-dev" 924 | } 925 | }, 926 | "autoload": { 927 | "psr-4": { 928 | "Incenteev\\ParameterHandler\\": "" 929 | } 930 | }, 931 | "notification-url": "https://packagist.org/downloads/", 932 | "license": [ 933 | "MIT" 934 | ], 935 | "authors": [ 936 | { 937 | "name": "Christophe Coevoet", 938 | "email": "stof@notk.org" 939 | } 940 | ], 941 | "description": "Composer script handling your ignored parameter file", 942 | "homepage": "https://github.com/Incenteev/ParameterHandler", 943 | "keywords": [ 944 | "parameters management" 945 | ], 946 | "time": "2015-11-10 17:04:01" 947 | }, 948 | { 949 | "name": "jdorn/sql-formatter", 950 | "version": "v1.2.17", 951 | "source": { 952 | "type": "git", 953 | "url": "https://github.com/jdorn/sql-formatter.git", 954 | "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" 955 | }, 956 | "dist": { 957 | "type": "zip", 958 | "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", 959 | "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", 960 | "shasum": "" 961 | }, 962 | "require": { 963 | "php": ">=5.2.4" 964 | }, 965 | "require-dev": { 966 | "phpunit/phpunit": "3.7.*" 967 | }, 968 | "type": "library", 969 | "extra": { 970 | "branch-alias": { 971 | "dev-master": "1.3.x-dev" 972 | } 973 | }, 974 | "autoload": { 975 | "classmap": [ 976 | "lib" 977 | ] 978 | }, 979 | "notification-url": "https://packagist.org/downloads/", 980 | "license": [ 981 | "MIT" 982 | ], 983 | "authors": [ 984 | { 985 | "name": "Jeremy Dorn", 986 | "email": "jeremy@jeremydorn.com", 987 | "homepage": "http://jeremydorn.com/" 988 | } 989 | ], 990 | "description": "a PHP SQL highlighting library", 991 | "homepage": "https://github.com/jdorn/sql-formatter/", 992 | "keywords": [ 993 | "highlight", 994 | "sql" 995 | ], 996 | "time": "2014-01-12 16:20:24" 997 | }, 998 | { 999 | "name": "kriswallsmith/assetic", 1000 | "version": "v1.3.2", 1001 | "source": { 1002 | "type": "git", 1003 | "url": "https://github.com/kriswallsmith/assetic.git", 1004 | "reference": "9928f7c4ad98b234e3559d1049abd13387f86db5" 1005 | }, 1006 | "dist": { 1007 | "type": "zip", 1008 | "url": "https://api.github.com/repos/kriswallsmith/assetic/zipball/9928f7c4ad98b234e3559d1049abd13387f86db5", 1009 | "reference": "9928f7c4ad98b234e3559d1049abd13387f86db5", 1010 | "shasum": "" 1011 | }, 1012 | "require": { 1013 | "php": ">=5.3.1", 1014 | "symfony/process": "~2.1|~3.0" 1015 | }, 1016 | "conflict": { 1017 | "twig/twig": "<1.23" 1018 | }, 1019 | "require-dev": { 1020 | "cssmin/cssmin": "3.0.1", 1021 | "joliclic/javascript-packer": "1.1", 1022 | "kamicane/packager": "1.0", 1023 | "leafo/lessphp": "^0.3.7", 1024 | "leafo/scssphp": "~0.1", 1025 | "mrclay/minify": "~2.2", 1026 | "patchwork/jsqueeze": "~1.0|~2.0", 1027 | "phpunit/phpunit": "~4.8", 1028 | "psr/log": "~1.0", 1029 | "ptachoire/cssembed": "~1.0", 1030 | "symfony/phpunit-bridge": "~2.7|~3.0", 1031 | "twig/twig": "~1.8|~2.0" 1032 | }, 1033 | "suggest": { 1034 | "leafo/lessphp": "Assetic provides the integration with the lessphp LESS compiler", 1035 | "leafo/scssphp": "Assetic provides the integration with the scssphp SCSS compiler", 1036 | "leafo/scssphp-compass": "Assetic provides the integration with the SCSS compass plugin", 1037 | "patchwork/jsqueeze": "Assetic provides the integration with the JSqueeze JavaScript compressor", 1038 | "ptachoire/cssembed": "Assetic provides the integration with phpcssembed to embed data uris", 1039 | "twig/twig": "Assetic provides the integration with the Twig templating engine" 1040 | }, 1041 | "type": "library", 1042 | "extra": { 1043 | "branch-alias": { 1044 | "dev-master": "1.4-dev" 1045 | } 1046 | }, 1047 | "autoload": { 1048 | "psr-0": { 1049 | "Assetic": "src/" 1050 | }, 1051 | "files": [ 1052 | "src/functions.php" 1053 | ] 1054 | }, 1055 | "notification-url": "https://packagist.org/downloads/", 1056 | "license": [ 1057 | "MIT" 1058 | ], 1059 | "authors": [ 1060 | { 1061 | "name": "Kris Wallsmith", 1062 | "email": "kris.wallsmith@gmail.com", 1063 | "homepage": "http://kriswallsmith.net/" 1064 | } 1065 | ], 1066 | "description": "Asset Management for PHP", 1067 | "homepage": "https://github.com/kriswallsmith/assetic", 1068 | "keywords": [ 1069 | "assets", 1070 | "compression", 1071 | "minification" 1072 | ], 1073 | "time": "2015-11-12 13:51:40" 1074 | }, 1075 | { 1076 | "name": "monolog/monolog", 1077 | "version": "1.17.2", 1078 | "source": { 1079 | "type": "git", 1080 | "url": "https://github.com/Seldaek/monolog.git", 1081 | "reference": "bee7f0dc9c3e0b69a6039697533dca1e845c8c24" 1082 | }, 1083 | "dist": { 1084 | "type": "zip", 1085 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bee7f0dc9c3e0b69a6039697533dca1e845c8c24", 1086 | "reference": "bee7f0dc9c3e0b69a6039697533dca1e845c8c24", 1087 | "shasum": "" 1088 | }, 1089 | "require": { 1090 | "php": ">=5.3.0", 1091 | "psr/log": "~1.0" 1092 | }, 1093 | "provide": { 1094 | "psr/log-implementation": "1.0.0" 1095 | }, 1096 | "require-dev": { 1097 | "aws/aws-sdk-php": "^2.4.9", 1098 | "doctrine/couchdb": "~1.0@dev", 1099 | "graylog2/gelf-php": "~1.0", 1100 | "jakub-onderka/php-parallel-lint": "0.9", 1101 | "php-console/php-console": "^3.1.3", 1102 | "phpunit/phpunit": "~4.5", 1103 | "phpunit/phpunit-mock-objects": "2.3.0", 1104 | "raven/raven": "^0.13", 1105 | "ruflin/elastica": ">=0.90 <3.0", 1106 | "swiftmailer/swiftmailer": "~5.3", 1107 | "videlalvaro/php-amqplib": "~2.4" 1108 | }, 1109 | "suggest": { 1110 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 1111 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 1112 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 1113 | "ext-mongo": "Allow sending log messages to a MongoDB server", 1114 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 1115 | "php-console/php-console": "Allow sending log messages to Google Chrome", 1116 | "raven/raven": "Allow sending log messages to a Sentry server", 1117 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 1118 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server", 1119 | "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib" 1120 | }, 1121 | "type": "library", 1122 | "extra": { 1123 | "branch-alias": { 1124 | "dev-master": "1.16.x-dev" 1125 | } 1126 | }, 1127 | "autoload": { 1128 | "psr-4": { 1129 | "Monolog\\": "src/Monolog" 1130 | } 1131 | }, 1132 | "notification-url": "https://packagist.org/downloads/", 1133 | "license": [ 1134 | "MIT" 1135 | ], 1136 | "authors": [ 1137 | { 1138 | "name": "Jordi Boggiano", 1139 | "email": "j.boggiano@seld.be", 1140 | "homepage": "http://seld.be" 1141 | } 1142 | ], 1143 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 1144 | "homepage": "http://github.com/Seldaek/monolog", 1145 | "keywords": [ 1146 | "log", 1147 | "logging", 1148 | "psr-3" 1149 | ], 1150 | "time": "2015-10-14 12:51:02" 1151 | }, 1152 | { 1153 | "name": "nesbot/carbon", 1154 | "version": "1.21.0", 1155 | "source": { 1156 | "type": "git", 1157 | "url": "https://github.com/briannesbitt/Carbon.git", 1158 | "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7" 1159 | }, 1160 | "dist": { 1161 | "type": "zip", 1162 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7b08ec6f75791e130012f206e3f7b0e76e18e3d7", 1163 | "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7", 1164 | "shasum": "" 1165 | }, 1166 | "require": { 1167 | "php": ">=5.3.0", 1168 | "symfony/translation": "~2.6|~3.0" 1169 | }, 1170 | "require-dev": { 1171 | "phpunit/phpunit": "~4.0|~5.0" 1172 | }, 1173 | "type": "library", 1174 | "autoload": { 1175 | "psr-4": { 1176 | "Carbon\\": "src/Carbon/" 1177 | } 1178 | }, 1179 | "notification-url": "https://packagist.org/downloads/", 1180 | "license": [ 1181 | "MIT" 1182 | ], 1183 | "authors": [ 1184 | { 1185 | "name": "Brian Nesbitt", 1186 | "email": "brian@nesbot.com", 1187 | "homepage": "http://nesbot.com" 1188 | } 1189 | ], 1190 | "description": "A simple API extension for DateTime.", 1191 | "homepage": "http://carbon.nesbot.com", 1192 | "keywords": [ 1193 | "date", 1194 | "datetime", 1195 | "time" 1196 | ], 1197 | "time": "2015-11-04 20:07:17" 1198 | }, 1199 | { 1200 | "name": "psr/log", 1201 | "version": "1.0.0", 1202 | "source": { 1203 | "type": "git", 1204 | "url": "https://github.com/php-fig/log.git", 1205 | "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" 1206 | }, 1207 | "dist": { 1208 | "type": "zip", 1209 | "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", 1210 | "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", 1211 | "shasum": "" 1212 | }, 1213 | "type": "library", 1214 | "autoload": { 1215 | "psr-0": { 1216 | "Psr\\Log\\": "" 1217 | } 1218 | }, 1219 | "notification-url": "https://packagist.org/downloads/", 1220 | "license": [ 1221 | "MIT" 1222 | ], 1223 | "authors": [ 1224 | { 1225 | "name": "PHP-FIG", 1226 | "homepage": "http://www.php-fig.org/" 1227 | } 1228 | ], 1229 | "description": "Common interface for logging libraries", 1230 | "keywords": [ 1231 | "log", 1232 | "psr", 1233 | "psr-3" 1234 | ], 1235 | "time": "2012-12-21 11:40:51" 1236 | }, 1237 | { 1238 | "name": "sensio/distribution-bundle", 1239 | "version": "v4.0.3", 1240 | "target-dir": "Sensio/Bundle/DistributionBundle", 1241 | "source": { 1242 | "type": "git", 1243 | "url": "https://github.com/sensiolabs/SensioDistributionBundle.git", 1244 | "reference": "2d061c01e708c83ede4720e2551d9449bf606c0a" 1245 | }, 1246 | "dist": { 1247 | "type": "zip", 1248 | "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/2d061c01e708c83ede4720e2551d9449bf606c0a", 1249 | "reference": "2d061c01e708c83ede4720e2551d9449bf606c0a", 1250 | "shasum": "" 1251 | }, 1252 | "require": { 1253 | "php": ">=5.3.9", 1254 | "sensiolabs/security-checker": "~3.0", 1255 | "symfony/class-loader": "~2.2", 1256 | "symfony/framework-bundle": "~2.3", 1257 | "symfony/process": "~2.2" 1258 | }, 1259 | "require-dev": { 1260 | "symfony/form": "~2.2", 1261 | "symfony/validator": "~2.2", 1262 | "symfony/yaml": "~2.2" 1263 | }, 1264 | "suggest": { 1265 | "symfony/form": "If you want to use the configurator", 1266 | "symfony/validator": "If you want to use the configurator", 1267 | "symfony/yaml": "If you want to use the configurator" 1268 | }, 1269 | "type": "symfony-bundle", 1270 | "extra": { 1271 | "branch-alias": { 1272 | "dev-master": "4.0.x-dev" 1273 | } 1274 | }, 1275 | "autoload": { 1276 | "psr-0": { 1277 | "Sensio\\Bundle\\DistributionBundle": "" 1278 | } 1279 | }, 1280 | "notification-url": "https://packagist.org/downloads/", 1281 | "license": [ 1282 | "MIT" 1283 | ], 1284 | "authors": [ 1285 | { 1286 | "name": "Fabien Potencier", 1287 | "email": "fabien@symfony.com" 1288 | } 1289 | ], 1290 | "description": "Base bundle for Symfony Distributions", 1291 | "keywords": [ 1292 | "configuration", 1293 | "distribution" 1294 | ], 1295 | "time": "2015-10-27 18:48:08" 1296 | }, 1297 | { 1298 | "name": "sensio/framework-extra-bundle", 1299 | "version": "v3.0.11", 1300 | "source": { 1301 | "type": "git", 1302 | "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", 1303 | "reference": "a79e205737b58d557c05caef6dfa8f94d8084bca" 1304 | }, 1305 | "dist": { 1306 | "type": "zip", 1307 | "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/a79e205737b58d557c05caef6dfa8f94d8084bca", 1308 | "reference": "a79e205737b58d557c05caef6dfa8f94d8084bca", 1309 | "shasum": "" 1310 | }, 1311 | "require": { 1312 | "doctrine/common": "~2.2", 1313 | "symfony/framework-bundle": "~2.3|~3.0" 1314 | }, 1315 | "require-dev": { 1316 | "symfony/expression-language": "~2.4|~3.0", 1317 | "symfony/security-bundle": "~2.4|~3.0" 1318 | }, 1319 | "suggest": { 1320 | "symfony/expression-language": "", 1321 | "symfony/psr-http-message-bridge": "To use the PSR-7 converters", 1322 | "symfony/security-bundle": "" 1323 | }, 1324 | "type": "symfony-bundle", 1325 | "extra": { 1326 | "branch-alias": { 1327 | "dev-master": "3.0.x-dev" 1328 | } 1329 | }, 1330 | "autoload": { 1331 | "psr-4": { 1332 | "Sensio\\Bundle\\FrameworkExtraBundle\\": "" 1333 | } 1334 | }, 1335 | "notification-url": "https://packagist.org/downloads/", 1336 | "license": [ 1337 | "MIT" 1338 | ], 1339 | "authors": [ 1340 | { 1341 | "name": "Fabien Potencier", 1342 | "email": "fabien@symfony.com" 1343 | } 1344 | ], 1345 | "description": "This bundle provides a way to configure your controllers with annotations", 1346 | "keywords": [ 1347 | "annotations", 1348 | "controllers" 1349 | ], 1350 | "time": "2015-10-28 15:47:04" 1351 | }, 1352 | { 1353 | "name": "sensio/generator-bundle", 1354 | "version": "v2.5.3", 1355 | "target-dir": "Sensio/Bundle/GeneratorBundle", 1356 | "source": { 1357 | "type": "git", 1358 | "url": "https://github.com/sensiolabs/SensioGeneratorBundle.git", 1359 | "reference": "e50108c2133ee5c9c484555faed50c17a61221d3" 1360 | }, 1361 | "dist": { 1362 | "type": "zip", 1363 | "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/e50108c2133ee5c9c484555faed50c17a61221d3", 1364 | "reference": "e50108c2133ee5c9c484555faed50c17a61221d3", 1365 | "shasum": "" 1366 | }, 1367 | "require": { 1368 | "symfony/console": "~2.5", 1369 | "symfony/framework-bundle": "~2.2" 1370 | }, 1371 | "require-dev": { 1372 | "doctrine/orm": "~2.2,>=2.2.3", 1373 | "symfony/doctrine-bridge": "~2.2", 1374 | "twig/twig": "~1.11" 1375 | }, 1376 | "type": "symfony-bundle", 1377 | "extra": { 1378 | "branch-alias": { 1379 | "dev-master": "2.5.x-dev" 1380 | } 1381 | }, 1382 | "autoload": { 1383 | "psr-0": { 1384 | "Sensio\\Bundle\\GeneratorBundle": "" 1385 | } 1386 | }, 1387 | "notification-url": "https://packagist.org/downloads/", 1388 | "license": [ 1389 | "MIT" 1390 | ], 1391 | "authors": [ 1392 | { 1393 | "name": "Fabien Potencier", 1394 | "email": "fabien@symfony.com" 1395 | } 1396 | ], 1397 | "description": "This bundle generates code for you", 1398 | "time": "2015-03-17 06:36:52" 1399 | }, 1400 | { 1401 | "name": "sensiolabs/security-checker", 1402 | "version": "v3.0.2", 1403 | "source": { 1404 | "type": "git", 1405 | "url": "https://github.com/sensiolabs/security-checker.git", 1406 | "reference": "21696b0daa731064c23cfb694c60a2584a7b6e93" 1407 | }, 1408 | "dist": { 1409 | "type": "zip", 1410 | "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/21696b0daa731064c23cfb694c60a2584a7b6e93", 1411 | "reference": "21696b0daa731064c23cfb694c60a2584a7b6e93", 1412 | "shasum": "" 1413 | }, 1414 | "require": { 1415 | "symfony/console": "~2.0|~3.0" 1416 | }, 1417 | "bin": [ 1418 | "security-checker" 1419 | ], 1420 | "type": "library", 1421 | "extra": { 1422 | "branch-alias": { 1423 | "dev-master": "3.0-dev" 1424 | } 1425 | }, 1426 | "autoload": { 1427 | "psr-0": { 1428 | "SensioLabs\\Security": "" 1429 | } 1430 | }, 1431 | "notification-url": "https://packagist.org/downloads/", 1432 | "license": [ 1433 | "MIT" 1434 | ], 1435 | "authors": [ 1436 | { 1437 | "name": "Fabien Potencier", 1438 | "email": "fabien.potencier@gmail.com" 1439 | } 1440 | ], 1441 | "description": "A security checker for your composer.lock", 1442 | "time": "2015-11-07 08:07:40" 1443 | }, 1444 | { 1445 | "name": "swiftmailer/swiftmailer", 1446 | "version": "v5.4.1", 1447 | "source": { 1448 | "type": "git", 1449 | "url": "https://github.com/swiftmailer/swiftmailer.git", 1450 | "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421" 1451 | }, 1452 | "dist": { 1453 | "type": "zip", 1454 | "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/0697e6aa65c83edf97bb0f23d8763f94e3f11421", 1455 | "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421", 1456 | "shasum": "" 1457 | }, 1458 | "require": { 1459 | "php": ">=5.3.3" 1460 | }, 1461 | "require-dev": { 1462 | "mockery/mockery": "~0.9.1,<0.9.4" 1463 | }, 1464 | "type": "library", 1465 | "extra": { 1466 | "branch-alias": { 1467 | "dev-master": "5.4-dev" 1468 | } 1469 | }, 1470 | "autoload": { 1471 | "files": [ 1472 | "lib/swift_required.php" 1473 | ] 1474 | }, 1475 | "notification-url": "https://packagist.org/downloads/", 1476 | "license": [ 1477 | "MIT" 1478 | ], 1479 | "authors": [ 1480 | { 1481 | "name": "Chris Corbyn" 1482 | }, 1483 | { 1484 | "name": "Fabien Potencier", 1485 | "email": "fabien@symfony.com" 1486 | } 1487 | ], 1488 | "description": "Swiftmailer, free feature-rich PHP mailer", 1489 | "homepage": "http://swiftmailer.org", 1490 | "keywords": [ 1491 | "email", 1492 | "mail", 1493 | "mailer" 1494 | ], 1495 | "time": "2015-06-06 14:19:39" 1496 | }, 1497 | { 1498 | "name": "symfony/assetic-bundle", 1499 | "version": "v2.7.1", 1500 | "source": { 1501 | "type": "git", 1502 | "url": "https://github.com/symfony/assetic-bundle.git", 1503 | "reference": "d885ec8451d5a7b077bda81bb19ac9fbff9cdc76" 1504 | }, 1505 | "dist": { 1506 | "type": "zip", 1507 | "url": "https://api.github.com/repos/symfony/assetic-bundle/zipball/d885ec8451d5a7b077bda81bb19ac9fbff9cdc76", 1508 | "reference": "d885ec8451d5a7b077bda81bb19ac9fbff9cdc76", 1509 | "shasum": "" 1510 | }, 1511 | "require": { 1512 | "kriswallsmith/assetic": "~1.3", 1513 | "php": ">=5.3.0", 1514 | "symfony/console": "~2.3|~3.0", 1515 | "symfony/dependency-injection": "~2.3|~3.0", 1516 | "symfony/framework-bundle": "~2.3|~3.0", 1517 | "symfony/yaml": "~2.3|~3.0" 1518 | }, 1519 | "conflict": { 1520 | "kriswallsmith/spork": "<=0.2", 1521 | "twig/twig": "<1.20" 1522 | }, 1523 | "require-dev": { 1524 | "kriswallsmith/spork": "~0.3", 1525 | "patchwork/jsqueeze": "~1.0", 1526 | "symfony/class-loader": "~2.3|~3.0", 1527 | "symfony/css-selector": "~2.3|~3.0", 1528 | "symfony/dom-crawler": "~2.3|~3.0", 1529 | "symfony/phpunit-bridge": "~2.7|~3.0", 1530 | "symfony/twig-bundle": "~2.3|~3.0" 1531 | }, 1532 | "suggest": { 1533 | "kriswallsmith/spork": "to be able to dump assets in parallel", 1534 | "symfony/twig-bundle": "to use the Twig integration" 1535 | }, 1536 | "type": "symfony-bundle", 1537 | "extra": { 1538 | "branch-alias": { 1539 | "dev-master": "2.7-dev" 1540 | } 1541 | }, 1542 | "autoload": { 1543 | "psr-4": { 1544 | "Symfony\\Bundle\\AsseticBundle\\": "" 1545 | } 1546 | }, 1547 | "notification-url": "https://packagist.org/downloads/", 1548 | "license": [ 1549 | "MIT" 1550 | ], 1551 | "authors": [ 1552 | { 1553 | "name": "Kris Wallsmith", 1554 | "email": "kris.wallsmith@gmail.com", 1555 | "homepage": "http://kriswallsmith.net/" 1556 | } 1557 | ], 1558 | "description": "Integrates Assetic into Symfony2", 1559 | "homepage": "https://github.com/symfony/AsseticBundle", 1560 | "keywords": [ 1561 | "assets", 1562 | "compression", 1563 | "minification" 1564 | ], 1565 | "time": "2015-11-17 09:45:47" 1566 | }, 1567 | { 1568 | "name": "symfony/monolog-bundle", 1569 | "version": "v2.8.2", 1570 | "source": { 1571 | "type": "git", 1572 | "url": "https://github.com/symfony/monolog-bundle.git", 1573 | "reference": "84785c4d44801c4dd82829fa2e1820cacfe2c46f" 1574 | }, 1575 | "dist": { 1576 | "type": "zip", 1577 | "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/84785c4d44801c4dd82829fa2e1820cacfe2c46f", 1578 | "reference": "84785c4d44801c4dd82829fa2e1820cacfe2c46f", 1579 | "shasum": "" 1580 | }, 1581 | "require": { 1582 | "monolog/monolog": "~1.8", 1583 | "php": ">=5.3.2", 1584 | "symfony/config": "~2.3|~3.0", 1585 | "symfony/dependency-injection": "~2.3|~3.0", 1586 | "symfony/http-kernel": "~2.3|~3.0", 1587 | "symfony/monolog-bridge": "~2.3|~3.0" 1588 | }, 1589 | "require-dev": { 1590 | "symfony/console": "~2.3|~3.0", 1591 | "symfony/yaml": "~2.3|~3.0" 1592 | }, 1593 | "type": "symfony-bundle", 1594 | "extra": { 1595 | "branch-alias": { 1596 | "dev-master": "2.8.x-dev" 1597 | } 1598 | }, 1599 | "autoload": { 1600 | "psr-4": { 1601 | "Symfony\\Bundle\\MonologBundle\\": "" 1602 | } 1603 | }, 1604 | "notification-url": "https://packagist.org/downloads/", 1605 | "license": [ 1606 | "MIT" 1607 | ], 1608 | "authors": [ 1609 | { 1610 | "name": "Symfony Community", 1611 | "homepage": "http://symfony.com/contributors" 1612 | }, 1613 | { 1614 | "name": "Fabien Potencier", 1615 | "email": "fabien@symfony.com" 1616 | } 1617 | ], 1618 | "description": "Symfony MonologBundle", 1619 | "homepage": "http://symfony.com", 1620 | "keywords": [ 1621 | "log", 1622 | "logging" 1623 | ], 1624 | "time": "2015-11-17 10:02:29" 1625 | }, 1626 | { 1627 | "name": "symfony/swiftmailer-bundle", 1628 | "version": "v2.3.8", 1629 | "source": { 1630 | "type": "git", 1631 | "url": "https://github.com/symfony/swiftmailer-bundle.git", 1632 | "reference": "970b13d01871207e81d17b17ddda025e7e21e797" 1633 | }, 1634 | "dist": { 1635 | "type": "zip", 1636 | "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/970b13d01871207e81d17b17ddda025e7e21e797", 1637 | "reference": "970b13d01871207e81d17b17ddda025e7e21e797", 1638 | "shasum": "" 1639 | }, 1640 | "require": { 1641 | "php": ">=5.3.2", 1642 | "swiftmailer/swiftmailer": ">=4.2.0,~5.0", 1643 | "symfony/swiftmailer-bridge": "~2.1" 1644 | }, 1645 | "require-dev": { 1646 | "symfony/config": "~2.1", 1647 | "symfony/dependency-injection": "~2.1", 1648 | "symfony/http-kernel": "~2.1", 1649 | "symfony/yaml": "~2.1" 1650 | }, 1651 | "suggest": { 1652 | "psr/log": "Allows logging" 1653 | }, 1654 | "type": "symfony-bundle", 1655 | "extra": { 1656 | "branch-alias": { 1657 | "dev-master": "2.3-dev" 1658 | } 1659 | }, 1660 | "autoload": { 1661 | "psr-4": { 1662 | "Symfony\\Bundle\\SwiftmailerBundle\\": "" 1663 | } 1664 | }, 1665 | "notification-url": "https://packagist.org/downloads/", 1666 | "license": [ 1667 | "MIT" 1668 | ], 1669 | "authors": [ 1670 | { 1671 | "name": "Symfony Community", 1672 | "homepage": "http://symfony.com/contributors" 1673 | }, 1674 | { 1675 | "name": "Fabien Potencier", 1676 | "email": "fabien@symfony.com" 1677 | } 1678 | ], 1679 | "description": "Symfony SwiftmailerBundle", 1680 | "homepage": "http://symfony.com", 1681 | "time": "2014-12-01 17:44:50" 1682 | }, 1683 | { 1684 | "name": "symfony/symfony", 1685 | "version": "v2.7.6", 1686 | "source": { 1687 | "type": "git", 1688 | "url": "https://github.com/symfony/symfony.git", 1689 | "reference": "66b2e9662c44d478b69e48278aa54079a006eb42" 1690 | }, 1691 | "dist": { 1692 | "type": "zip", 1693 | "url": "https://api.github.com/repos/symfony/symfony/zipball/66b2e9662c44d478b69e48278aa54079a006eb42", 1694 | "reference": "66b2e9662c44d478b69e48278aa54079a006eb42", 1695 | "shasum": "" 1696 | }, 1697 | "require": { 1698 | "doctrine/common": "~2.4", 1699 | "php": ">=5.3.9", 1700 | "psr/log": "~1.0", 1701 | "twig/twig": "~1.20|~2.0" 1702 | }, 1703 | "replace": { 1704 | "symfony/asset": "self.version", 1705 | "symfony/browser-kit": "self.version", 1706 | "symfony/class-loader": "self.version", 1707 | "symfony/config": "self.version", 1708 | "symfony/console": "self.version", 1709 | "symfony/css-selector": "self.version", 1710 | "symfony/debug": "self.version", 1711 | "symfony/debug-bundle": "self.version", 1712 | "symfony/dependency-injection": "self.version", 1713 | "symfony/doctrine-bridge": "self.version", 1714 | "symfony/dom-crawler": "self.version", 1715 | "symfony/event-dispatcher": "self.version", 1716 | "symfony/expression-language": "self.version", 1717 | "symfony/filesystem": "self.version", 1718 | "symfony/finder": "self.version", 1719 | "symfony/form": "self.version", 1720 | "symfony/framework-bundle": "self.version", 1721 | "symfony/http-foundation": "self.version", 1722 | "symfony/http-kernel": "self.version", 1723 | "symfony/intl": "self.version", 1724 | "symfony/locale": "self.version", 1725 | "symfony/monolog-bridge": "self.version", 1726 | "symfony/options-resolver": "self.version", 1727 | "symfony/process": "self.version", 1728 | "symfony/property-access": "self.version", 1729 | "symfony/proxy-manager-bridge": "self.version", 1730 | "symfony/routing": "self.version", 1731 | "symfony/security": "self.version", 1732 | "symfony/security-acl": "self.version", 1733 | "symfony/security-bundle": "self.version", 1734 | "symfony/security-core": "self.version", 1735 | "symfony/security-csrf": "self.version", 1736 | "symfony/security-http": "self.version", 1737 | "symfony/serializer": "self.version", 1738 | "symfony/stopwatch": "self.version", 1739 | "symfony/swiftmailer-bridge": "self.version", 1740 | "symfony/templating": "self.version", 1741 | "symfony/translation": "self.version", 1742 | "symfony/twig-bridge": "self.version", 1743 | "symfony/twig-bundle": "self.version", 1744 | "symfony/validator": "self.version", 1745 | "symfony/var-dumper": "self.version", 1746 | "symfony/web-profiler-bundle": "self.version", 1747 | "symfony/yaml": "self.version" 1748 | }, 1749 | "require-dev": { 1750 | "doctrine/data-fixtures": "1.0.*", 1751 | "doctrine/dbal": "~2.4", 1752 | "doctrine/doctrine-bundle": "~1.2", 1753 | "doctrine/orm": "~2.4,>=2.4.5", 1754 | "egulias/email-validator": "~1.2", 1755 | "ircmaxell/password-compat": "~1.0", 1756 | "monolog/monolog": "~1.11", 1757 | "ocramius/proxy-manager": "~0.4|~1.0" 1758 | }, 1759 | "type": "library", 1760 | "extra": { 1761 | "branch-alias": { 1762 | "dev-master": "2.7-dev" 1763 | } 1764 | }, 1765 | "autoload": { 1766 | "psr-4": { 1767 | "Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/", 1768 | "Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/", 1769 | "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/", 1770 | "Symfony\\Bridge\\Swiftmailer\\": "src/Symfony/Bridge/Swiftmailer/", 1771 | "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/", 1772 | "Symfony\\Bundle\\": "src/Symfony/Bundle/", 1773 | "Symfony\\Component\\": "src/Symfony/Component/" 1774 | }, 1775 | "classmap": [ 1776 | "src/Symfony/Component/HttpFoundation/Resources/stubs", 1777 | "src/Symfony/Component/Intl/Resources/stubs" 1778 | ], 1779 | "files": [ 1780 | "src/Symfony/Component/Intl/Resources/stubs/functions.php" 1781 | ] 1782 | }, 1783 | "notification-url": "https://packagist.org/downloads/", 1784 | "license": [ 1785 | "MIT" 1786 | ], 1787 | "authors": [ 1788 | { 1789 | "name": "Fabien Potencier", 1790 | "email": "fabien@symfony.com" 1791 | }, 1792 | { 1793 | "name": "Symfony Community", 1794 | "homepage": "https://symfony.com/contributors" 1795 | } 1796 | ], 1797 | "description": "The Symfony PHP framework", 1798 | "homepage": "https://symfony.com", 1799 | "keywords": [ 1800 | "framework" 1801 | ], 1802 | "time": "2015-10-27 19:07:24" 1803 | }, 1804 | { 1805 | "name": "twig/twig", 1806 | "version": "v1.23.1", 1807 | "source": { 1808 | "type": "git", 1809 | "url": "https://github.com/twigphp/Twig.git", 1810 | "reference": "d9b6333ae8dd2c8e3fd256e127548def0bc614c6" 1811 | }, 1812 | "dist": { 1813 | "type": "zip", 1814 | "url": "https://api.github.com/repos/twigphp/Twig/zipball/d9b6333ae8dd2c8e3fd256e127548def0bc614c6", 1815 | "reference": "d9b6333ae8dd2c8e3fd256e127548def0bc614c6", 1816 | "shasum": "" 1817 | }, 1818 | "require": { 1819 | "php": ">=5.2.7" 1820 | }, 1821 | "require-dev": { 1822 | "symfony/debug": "~2.7", 1823 | "symfony/phpunit-bridge": "~2.7" 1824 | }, 1825 | "type": "library", 1826 | "extra": { 1827 | "branch-alias": { 1828 | "dev-master": "1.23-dev" 1829 | } 1830 | }, 1831 | "autoload": { 1832 | "psr-0": { 1833 | "Twig_": "lib/" 1834 | } 1835 | }, 1836 | "notification-url": "https://packagist.org/downloads/", 1837 | "license": [ 1838 | "BSD-3-Clause" 1839 | ], 1840 | "authors": [ 1841 | { 1842 | "name": "Fabien Potencier", 1843 | "email": "fabien@symfony.com", 1844 | "homepage": "http://fabien.potencier.org", 1845 | "role": "Lead Developer" 1846 | }, 1847 | { 1848 | "name": "Armin Ronacher", 1849 | "email": "armin.ronacher@active-4.com", 1850 | "role": "Project Founder" 1851 | }, 1852 | { 1853 | "name": "Twig Team", 1854 | "homepage": "http://twig.sensiolabs.org/contributors", 1855 | "role": "Contributors" 1856 | } 1857 | ], 1858 | "description": "Twig, the flexible, fast, and secure template language for PHP", 1859 | "homepage": "http://twig.sensiolabs.org", 1860 | "keywords": [ 1861 | "templating" 1862 | ], 1863 | "time": "2015-11-05 12:49:06" 1864 | } 1865 | ], 1866 | "packages-dev": [], 1867 | "aliases": [], 1868 | "minimum-stability": "stable", 1869 | "stability-flags": [], 1870 | "prefer-stable": false, 1871 | "prefer-lowest": false, 1872 | "platform": { 1873 | "php": ">=5.3.9" 1874 | }, 1875 | "platform-dev": [] 1876 | } 1877 | --------------------------------------------------------------------------------