├── app ├── cache │ └── .gitkeep ├── logs │ └── .gitkeep ├── config │ ├── routing.yml │ ├── config_test.yml │ ├── routing_dev.yml │ ├── config_prod.yml │ ├── parameters.yml.dist │ ├── config_dev.yml │ ├── security.yml │ └── config.yml ├── .htaccess ├── AppCache.php ├── autoload.php ├── Resources │ └── views │ │ └── base.html.twig ├── console ├── phpunit.xml.dist ├── AppKernel.php ├── check.php └── SymfonyRequirements.php ├── vendor └── .gitkeep ├── .bowerrc ├── web ├── favicon.ico ├── apple-touch-icon.png ├── robots.txt ├── app.php ├── app_dev.php └── .htaccess ├── .ebextensions ├── cron │ └── main ├── bin │ ├── update-cache.sh │ ├── update-newrelic-ini.sh │ └── install-nodejs.sh ├── misc │ ├── aws-elasticbeanstalk-ec2-role-trust-policy.json │ ├── gitAwsPush-Group-Policy.json │ └── aws-cli-commands-used.md ├── 02-newrelic.config ├── 03-main.config ├── apache │ └── zapplication.conf └── env │ ├── prod-single.json │ ├── prod-variables.json │ └── prod-load.json ├── src ├── .htaccess └── Acme │ └── DemoBundle │ ├── Resources │ ├── public │ │ ├── images │ │ │ ├── logo.gif │ │ │ ├── search.png │ │ │ ├── blue-arrow.png │ │ │ ├── welcome-demo.gif │ │ │ ├── field-background.gif │ │ │ ├── welcome-configure.gif │ │ │ └── welcome-quick-tour.gif │ │ └── css │ │ │ └── demo.css │ ├── views │ │ ├── Demo │ │ │ ├── hello.html.twig │ │ │ ├── contact.html.twig │ │ │ └── index.html.twig │ │ ├── Secured │ │ │ ├── helloadmin.html.twig │ │ │ ├── layout.html.twig │ │ │ ├── hello.html.twig │ │ │ └── login.html.twig │ │ ├── layout.html.twig │ │ └── Welcome │ │ │ └── index.html.twig │ └── config │ │ ├── routing.yml │ │ └── services.xml │ ├── AcmeDemoBundle.php │ ├── Form │ └── ContactType.php │ ├── Controller │ ├── WelcomeController.php │ ├── DemoController.php │ └── SecuredController.php │ ├── DependencyInjection │ └── AcmeDemoExtension.php │ ├── EventListener │ └── ControllerListener.php │ ├── Command │ └── HelloWorldCommand.php │ ├── Tests │ └── Controller │ │ └── DemoControllerTest.php │ └── Twig │ └── Extension │ └── DemoExtension.php ├── README.md ├── .gitignore ├── bower.json ├── Gruntfile.js ├── .insight.yml ├── package.json ├── LICENSE ├── composer.json └── composer.lock /app/cache/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/logs/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vendor/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "web/assets/vendor" 3 | } 4 | -------------------------------------------------------------------------------- /web/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ifdattic/symfony-app-deploy-to-aws-eb-article-code/HEAD/web/favicon.ico -------------------------------------------------------------------------------- /.ebextensions/cron/main: -------------------------------------------------------------------------------- 1 | */5 * * * * . /opt/elasticbeanstalk/support/envvars && php /var/app/current/app/console acme:hello 2 | -------------------------------------------------------------------------------- /web/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ifdattic/symfony-app-deploy-to-aws-eb-article-code/HEAD/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 | -------------------------------------------------------------------------------- /app/config/routing.yml: -------------------------------------------------------------------------------- 1 | # AcmeDemoBundle routes (to be removed) 2 | _acme_demo: 3 | resource: "@AcmeDemoBundle/Resources/config/routing.yml" 4 | -------------------------------------------------------------------------------- /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/Acme/DemoBundle/Resources/public/images/logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ifdattic/symfony-app-deploy-to-aws-eb-article-code/HEAD/src/Acme/DemoBundle/Resources/public/images/logo.gif -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Resources/public/images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ifdattic/symfony-app-deploy-to-aws-eb-article-code/HEAD/src/Acme/DemoBundle/Resources/public/images/search.png -------------------------------------------------------------------------------- /app/AppCache.php: -------------------------------------------------------------------------------- 1 | Hello {{ name }}! 7 | {% endblock %} 8 | 9 | {% set code = code(_self) %} 10 | -------------------------------------------------------------------------------- /.ebextensions/bin/update-newrelic-ini.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | sed -i -e 's/newrelic.license.*/newrelic.license = '"$NEW_RELIC_LICENSE_KEY"'/' /etc/php-5.5.d/newrelic.ini 4 | sed -i -e 's/newrelic.appname.*/newrelic.appname = "'"$SYMFONY__ENV__NEW_RELIC__APPLICATION_NAME"'"/' /etc/php-5.5.d/newrelic.ini 5 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig: -------------------------------------------------------------------------------- 1 | {% extends "AcmeDemoBundle:Secured:layout.html.twig" %} 2 | 3 | {% block title "Hello " ~ name %} 4 | 5 | {% block content %} 6 |

Hello {{ name }} secured for Admins only!

7 | {% endblock %} 8 | 9 | {% set code = code(_self) %} 10 | -------------------------------------------------------------------------------- /.ebextensions/misc/aws-elasticbeanstalk-ec2-role-trust-policy.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version": "2008-10-17", 3 | "Statement": [ 4 | { 5 | "Sid": "", 6 | "Effect": "Allow", 7 | "Principal": { 8 | "Service": "ec2.amazonaws.com" 9 | }, 10 | "Action": "sts:AssumeRole" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig: -------------------------------------------------------------------------------- 1 | {% extends "AcmeDemoBundle::layout.html.twig" %} 2 | 3 | {% block content_header_more %} 4 | {{ parent() }} 5 |
  • logged in as {{ app.user ? app.user.username : 'Anonymous' }} - Logout
  • 6 | {% endblock %} 7 | -------------------------------------------------------------------------------- /app/autoload.php: -------------------------------------------------------------------------------- 1 | Hello {{ name }}! 7 | 8 | Hello resource secured for admin only. 9 | {% endblock %} 10 | 11 | {% set code = code(_self) %} 12 | -------------------------------------------------------------------------------- /app/Resources/views/base.html.twig: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {% block title %}Welcome!{% endblock %} 6 | {% block stylesheets %}{% endblock %} 7 | 8 | 9 | 10 | {% block body %}{% endblock %} 11 | {% block javascripts %}{% endblock %} 12 | 13 | 14 | -------------------------------------------------------------------------------- /.ebextensions/misc/gitAwsPush-Group-Policy.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version": "2012-10-17", 3 | "Statement": [ 4 | { 5 | "Effect": "Allow", 6 | "Action": [ 7 | "elasticbeanstalk:*", 8 | "ec2:*", 9 | "elasticloadbalancing:*", 10 | "autoscaling:*", 11 | "cloudwatch:*", 12 | "s3:*", 13 | "sns:*", 14 | "cloudformation:*", 15 | "rds:*" 16 | ], 17 | "Resource": "*" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Form/ContactType.php: -------------------------------------------------------------------------------- 1 | add('email', 'email'); 13 | $builder->add('message', 'textarea'); 14 | } 15 | 16 | public function getName() 17 | { 18 | return 'contact'; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig: -------------------------------------------------------------------------------- 1 | {% extends "AcmeDemoBundle::layout.html.twig" %} 2 | 3 | {% block title "Symfony - Contact form" %} 4 | 5 | {% block content %} 6 |
    7 | {{ form_errors(form) }} 8 | 9 | {{ form_row(form.email) }} 10 | {{ form_row(form.message) }} 11 | 12 | {{ form_rest(form) }} 13 | 14 |
    15 | {% endblock %} 16 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Controller/WelcomeController.php: -------------------------------------------------------------------------------- 1 | render('AcmeDemoBundle:Welcome:index.html.twig'); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/config/routing_dev.yml: -------------------------------------------------------------------------------- 1 | _wdt: 2 | resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml" 3 | prefix: /_wdt 4 | 5 | _profiler: 6 | resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml" 7 | prefix: /_profiler 8 | 9 | _configurator: 10 | resource: "@SensioDistributionBundle/Resources/config/routing/webconfigurator.xml" 11 | prefix: /_configurator 12 | 13 | _main: 14 | resource: routing.yml 15 | 16 | # AcmeDemoBundle routes (to be removed) 17 | _acme_demo: 18 | resource: "@AcmeDemoBundle/Resources/config/routing.yml" -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "symfony-deploy-aws-eb-articlee", 3 | "version": "0.0.0", 4 | "homepage": "https://github.com/ifdattic/symfony-deploy-aws-eb-article.git", 5 | "authors": [ 6 | { 7 | "name": "Andrew (Andrius) Marcinkevicius", 8 | "email": "andrew.web@ifdattic.com", 9 | "homepage": "http://ifdattic.com" 10 | } 11 | ], 12 | "license": "MIT", 13 | "ignore": [ 14 | "**/.*", 15 | "node_modules", 16 | "bower_components", 17 | "test", 18 | "tests" 19 | ], 20 | "dependencies": { 21 | "bootstrap": "~3.2.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /.ebextensions/02-newrelic.config: -------------------------------------------------------------------------------- 1 | packages: 2 | yum: 3 | newrelic-php5: [] 4 | newrelic-sysmond: [] 5 | rpm: 6 | newrelic: http://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm 7 | commands: 8 | 300-install-newrelic: 9 | command: "newrelic-install install" 10 | container_commands: 11 | 300-update-newrelic-ini: 12 | command: "source .ebextensions/bin/update-newrelic-ini.sh" 13 | 400-configure-newrelic-sysmond: 14 | command: "nrsysmond-config --set license_key=$NEW_RELIC_LICENSE_KEY" 15 | 430-start-sysmond: 16 | command: "/etc/init.d/newrelic-sysmond start" 17 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Resources/views/Demo/index.html.twig: -------------------------------------------------------------------------------- 1 | {% extends "AcmeDemoBundle::layout.html.twig" %} 2 | 3 | {% block title "Symfony - Demos" %} 4 | 5 | {% block content_header '' %} 6 | 7 | {% block content %} 8 |

    Available demos

    9 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /app/config/config_prod.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: config.yml } 3 | 4 | #framework: 5 | # validation: 6 | # cache: apc 7 | 8 | #doctrine: 9 | # orm: 10 | # metadata_cache_driver: apc 11 | # result_cache_driver: apc 12 | # query_cache_driver: apc 13 | 14 | monolog: 15 | handlers: 16 | main: 17 | type: fingers_crossed 18 | action_level: error 19 | handler: nested 20 | nested: 21 | type: stream 22 | path: "%kernel.logs_dir%/%kernel.environment%.log" 23 | level: debug 24 | console: 25 | type: console 26 | 27 | ekino_new_relic: 28 | enabled: true 29 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function (grunt) { 2 | var jsFilePaths = [ 3 | 'js/*.js', 4 | 'js/app/*.js', 5 | 'js/app/modules/*.js' 6 | ]; 7 | 8 | grunt.initConfig({ 9 | pkg: grunt.file.readJSON('package.json'), 10 | 11 | appDir: 'web/assets', 12 | 13 | jshint: { 14 | options: { 15 | reporter: require('jshint-stylish') 16 | }, 17 | all: [ 18 | 'Gruntfile.js', 19 | '<%= appDir %>/js/{,*/}*.js' 20 | ] 21 | } 22 | }); 23 | 24 | grunt.loadNpmTasks('grunt-contrib-jshint'); 25 | 26 | grunt.registerTask('default', ['jshint']); 27 | 28 | grunt.registerTask('production', ['jshint']); 29 | }; 30 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php: -------------------------------------------------------------------------------- 1 | load('services.xml'); 16 | } 17 | 18 | public function getAlias() 19 | { 20 | return 'acme_demo'; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/EventListener/ControllerListener.php: -------------------------------------------------------------------------------- 1 | extension = $extension; 16 | } 17 | 18 | public function onKernelController(FilterControllerEvent $event) 19 | { 20 | if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) { 21 | $this->extension->setController($event->getController()); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /.insight.yml: -------------------------------------------------------------------------------- 1 | pre_composer_script: | 2 | yes '' | pecl install mongo 3 | 4 | cp app/config/parameters.yml.dist app/config/parameters.yml 5 | sed -i -e "s/secret:.*/secret: secret/" app/config/parameters.yml 6 | sed -i -e "s/mongodb_server:.*/mongodb_server: 'mongodb:\/\/localhost:27017'/" app/config/parameters.yml 7 | sed -i -e "s/mongodb_database:.*/mongodb_database: test_database/" app/config/parameters.yml 8 | sed -i -e "s/mongodb_password:.*/mongodb_password: ~/" app/config/parameters.yml 9 | sed -i -e "s/mongodb_username:.*/mongodb_username: ~/" app/config/parameters.yml 10 | sed -i -e "s/new_relic_application_name:.*/new_relic_application_name: ~/" app/config/parameters.yml 11 | sed -i -e "s/new_relic_api_key:.*/new_relic_api_key: ~/" app/config/parameters.yml 12 | 13 | php_ini: | 14 | extension=mongo.so 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "roosymfony-deploy-aws-eb-articlekfire", 3 | "version": "0.0.0", 4 | "description": "", 5 | "main": "", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/ifdattic/symfony-deploy-aws-eb-article.git" 12 | }, 13 | "author": { 14 | "name": "Andrew (Andrius) Marcinkevicius", 15 | "email": "andrew.web@ifdattic.com", 16 | "homepage": "http://ifdattic.com" 17 | }, 18 | "license": "MIT", 19 | "bugs": { 20 | "url": "https://github.com/ifdattic/symfony-deploy-aws-eb-article/issues" 21 | }, 22 | "homepage": "https://github.com/ifdattic/symfony-deploy-aws-eb-article", 23 | "devDependencies": { 24 | "grunt": "^0.4.5", 25 | "grunt-contrib-jshint": "^0.10.0", 26 | "jshint-stylish": "^1.0.0" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/config/parameters.yml.dist: -------------------------------------------------------------------------------- 1 | parameters: 2 | database_driver: pdo_mysql 3 | database_host: 127.0.0.1 4 | database_port: ~ 5 | database_name: symfony 6 | database_user: root 7 | database_password: ~ 8 | 9 | mailer_transport: smtp 10 | mailer_host: 127.0.0.1 11 | mailer_user: ~ 12 | mailer_password: ~ 13 | 14 | locale: en 15 | secret: "%env.secret%" 16 | 17 | debug_toolbar: true 18 | debug_redirects: false 19 | use_assetic_controller: true 20 | 21 | mongodb_server: "%env.mongodb.server%" 22 | mongodb_database: "%env.mongodb.database%" 23 | mongodb_password: "%env.mongodb.password%" 24 | mongodb_username: "%env.mongodb.username%" 25 | 26 | new_relic_application_name: "%env.new_relic.application_name%" 27 | new_relic_api_key: "%env.new_relic.api.key%" 28 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Resources/config/services.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /web/app.php: -------------------------------------------------------------------------------- 1 | unregister(); 14 | $apcLoader->register(true); 15 | */ 16 | 17 | require_once __DIR__.'/../app/AppKernel.php'; 18 | //require_once __DIR__.'/../app/AppCache.php'; 19 | 20 | $kernel = new AppKernel('prod', false); 21 | $kernel->loadClassCache(); 22 | //$kernel = new AppCache($kernel); 23 | 24 | // When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter 25 | //Request::enableHttpMethodParameterOverride(); 26 | $request = Request::createFromGlobals(); 27 | $response = $kernel->handle($request); 28 | $response->send(); 29 | $kernel->terminate($request, $response); 30 | -------------------------------------------------------------------------------- /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: "%debug_toolbar%" 12 | intercept_redirects: "%debug_redirects%" 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 | # uncomment to get logging in your browser 24 | # you may have to allow bigger header sizes in your Web server configuration 25 | #firephp: 26 | # type: firephp 27 | # level: info 28 | #chromephp: 29 | # type: chromephp 30 | # level: info 31 | 32 | assetic: 33 | use_controller: "%use_assetic_controller%" 34 | 35 | #swiftmailer: 36 | # delivery_address: me@example.com 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Andrew (Andrius) Marcinkevicius 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /.ebextensions/bin/install-nodejs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | hash_file="/tmp/nodejshash" 4 | 5 | check_if_npm_packages_has_to_be_installed () { 6 | if [ -f $hash_file ]; then 7 | check_if_same_hash 8 | else 9 | return 0 10 | fi 11 | } 12 | 13 | check_if_same_hash () { 14 | hash_new="$(md5sum .ebextensions/bin/install-nodejs.sh 2> /dev/null | cut -d ' ' -f 1)" 15 | hash_current="$(cat "$hash_file" 2> /dev/null | cut -d ' ' -f 1)" 16 | 17 | if [ $hash_new == $hash_current ]; then 18 | return 1 19 | else 20 | return 0 21 | fi 22 | } 23 | 24 | install_node () { 25 | if hash nodejs 2> /dev/null; then 26 | echo 'nodejs install, add more processing if needed' > /dev/null 27 | else 28 | curl -sL https://rpm.nodesource.com/setup | bash - 29 | yum install -y nodejs-0.10.32 30 | fi 31 | } 32 | 33 | install_npm_packages () { 34 | npm install -g bower 35 | npm install -g grunt-cli 36 | } 37 | 38 | update_current_hash () { 39 | echo $hash_new > $hash_file 40 | } 41 | 42 | install_node 43 | 44 | if check_if_npm_packages_has_to_be_installed; then 45 | install_npm_packages 46 | update_current_hash 47 | fi 48 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Resources/views/layout.html.twig: -------------------------------------------------------------------------------- 1 | {% extends "TwigBundle::layout.html.twig" %} 2 | 3 | {% block head %} 4 | 5 | 6 | {% endblock %} 7 | 8 | {% block title 'Demo Bundle' %} 9 | 10 | {% block body %} 11 | {% for flashMessage in app.session.flashbag.get('notice') %} 12 |
    13 | Notice: {{ flashMessage }} 14 |
    15 | {% endfor %} 16 | 17 | {% block content_header %} 18 | 23 | 24 |
    25 | {% endblock %} 26 | 27 |
    28 | {% block content %}{% endblock %} 29 |
    30 | 31 | {% if code is defined %} 32 |

    Code behind this page

    33 |
    34 |
    {{ code|raw }}
    35 |
    36 | {% endif %} 37 | {% endblock %} 38 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Resources/views/Secured/login.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'AcmeDemoBundle::layout.html.twig' %} 2 | 3 | {% block content %} 4 |

    Login

    5 | 6 |

    7 | Choose between two default users: user/userpass (ROLE_USER) or admin/adminpass (ROLE_ADMIN) 8 |

    9 | 10 | {% if error %} 11 |
    {{ error.message }}
    12 | {% endif %} 13 | 14 |
    15 |
    16 | 17 | 18 |
    19 | 20 |
    21 | 22 | 23 |
    24 | 25 | 32 |
    33 | {% endblock %} 34 | 35 | {% set code = code(_self) %} 36 | -------------------------------------------------------------------------------- /app/phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | ../src/*/*Bundle/Tests 13 | ../src/*/Bundle/*Bundle/Tests 14 | 15 | 16 | 17 | 22 | 23 | 24 | 25 | ../src 26 | 27 | ../src/*/*Bundle/Resources 28 | ../src/*/*Bundle/Tests 29 | ../src/*/Bundle/*Bundle/Resources 30 | ../src/*/Bundle/*Bundle/Tests 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /.ebextensions/03-main.config: -------------------------------------------------------------------------------- 1 | commands: 2 | 200-install-mongo-ext: 3 | command: "yes '' | pecl install mongo" 4 | ignoreErrors: true 5 | 300-composer-update: 6 | command: "export COMPOSER_HOME=/root && composer.phar self-update -n" 7 | container_commands: 8 | 100-install-nodejs: 9 | command: "source .ebextensions/bin/install-nodejs.sh" 10 | 200-copy-apache-config: 11 | command: "cp .ebextensions/apache/zapplication.conf /etc/httpd/conf.d/zapplication.conf" 12 | 300-run-composer: 13 | command: "composer.phar install --no-dev --optimize-autoloader --prefer-dist --no-interaction" 14 | 400-install-npm-packages: 15 | command: "npm install" 16 | 425-install-bower-packages: 17 | command: "bower install --allow-root" 18 | 450-run-grunt: 19 | command: "grunt production" 20 | 550-dump-assets: 21 | command: "php app/console assetic:dump" 22 | 600-update-cache: 23 | command: "source .ebextensions/bin/update-cache.sh" 24 | 700-remove-dev-app: 25 | command: "rm web/app_dev.php" 26 | 800-run-cron: 27 | command: "crontab .ebextensions/cron/main" 28 | 900-notify-deployment: 29 | command: "php app/console newrelic:notify-deployment --user=eb" 30 | -------------------------------------------------------------------------------- /app/config/security.yml: -------------------------------------------------------------------------------- 1 | security: 2 | encoders: 3 | Symfony\Component\Security\Core\User\User: plaintext 4 | 5 | role_hierarchy: 6 | ROLE_ADMIN: ROLE_USER 7 | ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 8 | 9 | providers: 10 | in_memory: 11 | memory: 12 | users: 13 | user: { password: userpass, roles: [ 'ROLE_USER' ] } 14 | admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] } 15 | 16 | firewalls: 17 | dev: 18 | pattern: ^/(_(profiler|wdt)|css|images|js)/ 19 | security: false 20 | 21 | demo_login: 22 | pattern: ^/demo/secured/login$ 23 | security: false 24 | 25 | demo_secured_area: 26 | pattern: ^/demo/secured/ 27 | form_login: 28 | check_path: _demo_security_check 29 | login_path: _demo_login 30 | logout: 31 | path: _demo_logout 32 | target: _demo 33 | #anonymous: ~ 34 | #http_basic: 35 | # realm: "Secured Demo Area" 36 | 37 | access_control: 38 | #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } -------------------------------------------------------------------------------- /web/app_dev.php: -------------------------------------------------------------------------------- 1 | loadClassCache(); 27 | $request = Request::createFromGlobals(); 28 | $response = $kernel->handle($request); 29 | $response->send(); 30 | $kernel->terminate($request, $response); 31 | -------------------------------------------------------------------------------- /.ebextensions/apache/zapplication.conf: -------------------------------------------------------------------------------- 1 | php_value short_open_tag off 2 | 3 | # "-Indexes" will have Apache block users from browsing folders without a 4 | # default document Usually you should leave this activated, because you 5 | # shouldn't allow everybody to surf through every folder on your server (which 6 | # includes rather private places like CMS system folders). 7 | 8 | Options -Indexes 9 | 10 | 11 | # Block access to "hidden" directories or files whose names begin with a 12 | # period. This includes directories used by version control systems such as 13 | # Subversion or Git. 14 | 15 | RewriteCond %{SCRIPT_FILENAME} -d [OR] 16 | RewriteCond %{SCRIPT_FILENAME} -f 17 | RewriteRule "(^|/)\." - [F] 18 | 19 | 20 | # Block access to backup and source files. These files may be left by some 21 | # text/html editors and pose a great security danger, when anyone can access 22 | # them. 23 | 24 | Order allow,deny 25 | Deny from all 26 | Satisfy All 27 | 28 | 29 | # Block access to files & directories starting with a dot 30 | 31 | Order allow,deny 32 | Deny from all 33 | 34 | 35 | Order allow,deny 36 | Deny from all 37 | 38 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Command/HelloWorldCommand.php: -------------------------------------------------------------------------------- 1 | getContainer(). 15 | * 16 | * @author Tobias Schultze 17 | */ 18 | class HelloWorldCommand extends Command 19 | { 20 | /** 21 | * {@inheritdoc} 22 | */ 23 | protected function configure() 24 | { 25 | $this 26 | ->setName('acme:hello') 27 | ->setDescription('Hello World example command') 28 | ->addArgument('who', InputArgument::OPTIONAL, 'Who to greet.', 'World') 29 | ->setHelp(<<%command.name% command greets somebody or everybody: 31 | 32 | php %command.full_name% 33 | 34 | The optional argument specifies who to greet: 35 | 36 | php %command.full_name% Fabien 37 | EOF 38 | ); 39 | } 40 | 41 | /** 42 | * {@inheritdoc} 43 | */ 44 | protected function execute(InputInterface $input, OutputInterface $output) 45 | { 46 | $output->writeln(sprintf('Hello %s!', $input->getArgument('who'))); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /.ebextensions/env/prod-single.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "Namespace": "aws:elasticbeanstalk:environment", 4 | "OptionName": "EnvironmentType", 5 | "Value": "SingleInstance" 6 | }, 7 | { 8 | "Namespace": "aws:autoscaling:launchconfiguration", 9 | "OptionName": "EC2KeyName", 10 | "Value": "demoapp_prodkey" 11 | }, 12 | { 13 | "Namespace": "aws:autoscaling:launchconfiguration", 14 | "OptionName": "IamInstanceProfile", 15 | "Value": "aws-elasticbeanstalk-ec2-role" 16 | }, 17 | { 18 | "Namespace": "aws:autoscaling:launchconfiguration", 19 | "OptionName": "InstanceType", 20 | "Value": "t2.micro" 21 | }, 22 | { 23 | "Namespace": "aws:ec2:vpc", 24 | "OptionName": "VPCId", 25 | "Value": "" 26 | }, 27 | { 28 | "Namespace": "aws:ec2:vpc", 29 | "OptionName": "Subnets", 30 | "Value": "" 31 | }, 32 | { 33 | "Namespace": "aws:ec2:vpc", 34 | "OptionName": "ELBSubnets", 35 | "Value": "" 36 | }, 37 | { 38 | "Namespace": "aws:elasticbeanstalk:container:php:phpini", 39 | "OptionName": "memory_limit", 40 | "Value": "800M" 41 | }, 42 | { 43 | "Namespace": "aws:elasticbeanstalk:container:php:phpini", 44 | "OptionName": "document_root", 45 | "Value": "/web" 46 | }, 47 | { 48 | "Namespace": "aws:elasticbeanstalk:hostmanager", 49 | "OptionName": "LogPublicationControl", 50 | "Value": "true" 51 | } 52 | ] 53 | -------------------------------------------------------------------------------- /app/AppKernel.php: -------------------------------------------------------------------------------- 1 | getEnvironment(), array('dev', 'test'))) { 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(__DIR__.'/config/config_'.$this->getEnvironment().'.yml'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php: -------------------------------------------------------------------------------- 1 | request('GET', '/demo/hello/Fabien'); 14 | 15 | $this->assertGreaterThan(0, $crawler->filter('html:contains("Hello Fabien")')->count()); 16 | } 17 | 18 | public function testSecureSection() 19 | { 20 | $client = static::createClient(); 21 | 22 | // goes to the secure page 23 | $crawler = $client->request('GET', '/demo/secured/hello/World'); 24 | 25 | // redirects to the login page 26 | $crawler = $client->followRedirect(); 27 | 28 | // submits the login form 29 | $form = $crawler->selectButton('Login')->form(array('_username' => 'admin', '_password' => 'adminpass')); 30 | $client->submit($form); 31 | 32 | // redirect to the original page (but now authenticated) 33 | $crawler = $client->followRedirect(); 34 | 35 | // check that the page is the right one 36 | $this->assertCount(1, $crawler->filter('h1.title:contains("Hello World!")')); 37 | 38 | // click on the secure link 39 | $link = $crawler->selectLink('Hello resource secured')->link(); 40 | $crawler = $client->click($link); 41 | 42 | // check that the page is the right one 43 | $this->assertCount(1, $crawler->filter('h1.title:contains("secured for Admins only!")')); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Controller/DemoController.php: -------------------------------------------------------------------------------- 1 | $name); 32 | } 33 | 34 | /** 35 | * @Route("/contact", name="_demo_contact") 36 | * @Template() 37 | */ 38 | public function contactAction(Request $request) 39 | { 40 | $form = $this->createForm(new ContactType()); 41 | $form->handleRequest($request); 42 | 43 | if ($form->isValid()) { 44 | $mailer = $this->get('mailer'); 45 | 46 | // .. setup a message and send it 47 | // http://symfony.com/doc/current/cookbook/email.html 48 | 49 | $request->getSession()->getFlashBag()->set('notice', 'Message sent!'); 50 | 51 | return new RedirectResponse($this->generateUrl('_demo')); 52 | } 53 | 54 | return array('form' => $form->createView()); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /.ebextensions/env/prod-variables.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "Namespace": "aws:elasticbeanstalk:application:environment", 4 | "OptionName": "SYMFONY_ENV", 5 | "Value": "prod" 6 | }, 7 | { 8 | "Namespace": "aws:elasticbeanstalk:application:environment", 9 | "OptionName": "SYMFONY_DEBUG", 10 | "Value": "0" 11 | }, 12 | { 13 | "Namespace": "aws:elasticbeanstalk:application:environment", 14 | "OptionName": "SYMFONY__ENV__SECRET", 15 | "Value": "" 16 | }, 17 | { 18 | "Namespace": "aws:elasticbeanstalk:application:environment", 19 | "OptionName": "SYMFONY__ENV__MONGODB__SERVER", 20 | "Value": "" 21 | }, 22 | { 23 | "Namespace": "aws:elasticbeanstalk:application:environment", 24 | "OptionName": "SYMFONY__ENV__MONGODB__DATABASE", 25 | "Value": "" 26 | }, 27 | { 28 | "Namespace": "aws:elasticbeanstalk:application:environment", 29 | "OptionName": "SYMFONY__ENV__MONGODB__PASSWORD", 30 | "Value": "" 31 | }, 32 | { 33 | "Namespace": "aws:elasticbeanstalk:application:environment", 34 | "OptionName": "SYMFONY__ENV__MONGODB__USERNAME", 35 | "Value": "" 36 | }, 37 | { 38 | "Namespace": "aws:elasticbeanstalk:application:environment", 39 | "OptionName": "SYMFONY__ENV__NEW_RELIC__API__KEY", 40 | "Value": "" 41 | }, 42 | { 43 | "Namespace": "aws:elasticbeanstalk:application:environment", 44 | "OptionName": "SYMFONY__ENV__NEW_RELIC__APPLICATION_NAME", 45 | "Value": "" 46 | }, 47 | { 48 | "Namespace": "aws:elasticbeanstalk:application:environment", 49 | "OptionName": "NEW_RELIC_LICENSE_KEY", 50 | "Value": "" 51 | } 52 | ] 53 | -------------------------------------------------------------------------------- /.ebextensions/env/prod-load.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "Namespace": "aws:autoscaling:launchconfiguration", 4 | "OptionName": "EC2KeyName", 5 | "Value": "demoapp_prodkey" 6 | }, 7 | { 8 | "Namespace": "aws:autoscaling:launchconfiguration", 9 | "OptionName": "IamInstanceProfile", 10 | "Value": "aws-elasticbeanstalk-ec2-role" 11 | }, 12 | { 13 | "Namespace": "aws:autoscaling:launchconfiguration", 14 | "OptionName": "InstanceType", 15 | "Value": "t2.micro" 16 | }, 17 | { 18 | "Namespace": "aws:ec2:vpc", 19 | "OptionName": "VPCId", 20 | "Value": "" 21 | }, 22 | { 23 | "Namespace": "aws:ec2:vpc", 24 | "OptionName": "Subnets", 25 | "Value": "" 26 | }, 27 | { 28 | "Namespace": "aws:ec2:vpc", 29 | "OptionName": "ELBSubnets", 30 | "Value": "" 31 | }, 32 | { 33 | "Namespace": "aws:elasticbeanstalk:container:php:phpini", 34 | "OptionName": "memory_limit", 35 | "Value": "800M" 36 | }, 37 | { 38 | "Namespace": "aws:elasticbeanstalk:container:php:phpini", 39 | "OptionName": "document_root", 40 | "Value": "/web" 41 | }, 42 | { 43 | "Namespace": "aws:elasticbeanstalk:hostmanager", 44 | "OptionName": "LogPublicationControl", 45 | "Value": "true" 46 | } 47 | { 48 | "Namespace": "aws:autoscaling:asg", 49 | "OptionName": "MinSize", 50 | "Value": "1" 51 | }, 52 | { 53 | "Namespace": "aws:autoscaling:asg", 54 | "OptionName": "MaxSize", 55 | "Value": "4" 56 | }, 57 | { 58 | "Namespace": "aws:autoscaling:launchconfiguration", 59 | "OptionName": "SecurityGroups", 60 | "Value": "" 61 | } 62 | ] 63 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Controller/SecuredController.php: -------------------------------------------------------------------------------- 1 | attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { 24 | $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR); 25 | } else { 26 | $error = $request->getSession()->get(SecurityContext::AUTHENTICATION_ERROR); 27 | } 28 | 29 | return array( 30 | 'last_username' => $request->getSession()->get(SecurityContext::LAST_USERNAME), 31 | 'error' => $error, 32 | ); 33 | } 34 | 35 | /** 36 | * @Route("/login_check", name="_demo_security_check") 37 | */ 38 | public function securityCheckAction() 39 | { 40 | // The security layer will intercept this request 41 | } 42 | 43 | /** 44 | * @Route("/logout", name="_demo_logout") 45 | */ 46 | public function logoutAction() 47 | { 48 | // The security layer will intercept this request 49 | } 50 | 51 | /** 52 | * @Route("/hello", defaults={"name"="World"}), 53 | * @Route("/hello/{name}", name="_demo_secured_hello") 54 | * @Template() 55 | */ 56 | public function helloAction($name) 57 | { 58 | return array('name' => $name); 59 | } 60 | 61 | /** 62 | * @Route("/hello/admin/{name}", name="_demo_secured_hello_admin") 63 | * @Security("is_granted('ROLE_ADMIN')") 64 | * @Template() 65 | */ 66 | public function helloadminAction($name) 67 | { 68 | return array('name' => $name); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Twig/Extension/DemoExtension.php: -------------------------------------------------------------------------------- 1 | loader = $loader; 15 | } 16 | 17 | public function setController($controller) 18 | { 19 | $this->controller = $controller; 20 | } 21 | 22 | /** 23 | * {@inheritdoc} 24 | */ 25 | public function getFunctions() 26 | { 27 | return array( 28 | new \Twig_SimpleFunction('code', array($this, 'getCode'), array('is_safe' => array('html'))), 29 | ); 30 | } 31 | 32 | public function getCode($template) 33 | { 34 | // highlight_string highlights php code only if 'getControllerCode(), true); 36 | $controller = str_replace('<?php    ', '    ', $controller); 37 | 38 | $template = htmlspecialchars($this->getTemplateCode($template), ENT_QUOTES, 'UTF-8'); 39 | 40 | // remove the code block 41 | $template = str_replace('{% set code = code(_self) %}', '', $template); 42 | 43 | return <<Controller Code

    45 |
    $controller
    46 | 47 |

    Template Code

    48 |
    $template
    49 | EOF; 50 | } 51 | 52 | protected function getControllerCode() 53 | { 54 | $class = get_class($this->controller[0]); 55 | if (class_exists('CG\Core\ClassUtils')) { 56 | $class = ClassUtils::getUserClass($class); 57 | } 58 | 59 | $r = new \ReflectionClass($class); 60 | $m = $r->getMethod($this->controller[1]); 61 | 62 | $code = file($r->getFilename()); 63 | 64 | return ' '.$m->getDocComment()."\n".implode('', array_slice($code, $m->getStartline() - 1, $m->getEndLine() - $m->getStartline() + 1)); 65 | } 66 | 67 | protected function getTemplateCode($template) 68 | { 69 | return $this->loader->getSource($template->getTemplateName()); 70 | } 71 | 72 | /** 73 | * Returns the name of the extension. 74 | * 75 | * @return string The extension name 76 | */ 77 | public function getName() 78 | { 79 | return 'demo'; 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ifdattic/symfony-deploy-aws-eb-article", 3 | "license": "MIT", 4 | "type": "project", 5 | "description": "The code used in http://ifdattic.com/how-to-deploy-symfony-application-to-aws-elasticbeanstalk article", 6 | "authors": [ 7 | { 8 | "name": "Andrew (Andrius) Marcinkevicius", 9 | "email": "andrew.web@ifdattic.com", 10 | "homepage": "http://ifdattic.com" 11 | } 12 | ], 13 | "autoload": { 14 | "psr-0": { "": "src/", "SymfonyStandard": "app/" } 15 | }, 16 | "require": { 17 | "php": ">=5.3.3", 18 | "symfony/symfony": "2.5.*", 19 | "doctrine/orm": "~2.2,>=2.2.3", 20 | "doctrine/doctrine-bundle": "~1.2", 21 | "twig/extensions": "~1.0", 22 | "symfony/assetic-bundle": "~2.3", 23 | "symfony/swiftmailer-bundle": "~2.3", 24 | "symfony/monolog-bundle": "~2.4", 25 | "sensio/distribution-bundle": "~3.0", 26 | "sensio/framework-extra-bundle": "~3.0", 27 | "incenteev/composer-parameter-handler": "~2.0", 28 | "doctrine/mongodb-odm": "1.0.*@dev", 29 | "doctrine/mongodb-odm-bundle": "3.0.*@dev", 30 | "ekino/newrelic-bundle": "1.2.*@dev" 31 | }, 32 | "require-dev": { 33 | "sensio/generator-bundle": "~2.3" 34 | }, 35 | "scripts": { 36 | "post-root-package-install": [ 37 | "SymfonyStandard\\Composer::hookRootPackageInstall" 38 | ], 39 | "post-install-cmd": [ 40 | "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 41 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", 42 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", 43 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets" 44 | ], 45 | "post-update-cmd": [ 46 | "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 47 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", 48 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", 49 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets" 50 | ] 51 | }, 52 | "config": { 53 | "bin-dir": "bin" 54 | }, 55 | "extra": { 56 | "symfony-app-dir": "app", 57 | "symfony-web-dir": "web", 58 | "incenteev-parameters": { 59 | "file": "app/config/parameters.yml" 60 | }, 61 | "branch-alias": { 62 | "dev-master": "2.5-dev" 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /app/config/config.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: parameters.yml } 3 | - { resource: security.yml } 4 | 5 | framework: 6 | #esi: ~ 7 | #translator: { fallback: "%locale%" } 8 | secret: "%secret%" 9 | router: 10 | resource: "%kernel.root_dir%/config/routing.yml" 11 | strict_requirements: ~ 12 | form: ~ 13 | csrf_protection: ~ 14 | validation: { enable_annotations: true } 15 | templating: 16 | engines: ['twig'] 17 | #assets_version: SomeVersionScheme 18 | default_locale: "%locale%" 19 | trusted_hosts: ~ 20 | trusted_proxies: ~ 21 | session: 22 | # handler_id set to null will use default session handler from php.ini 23 | handler_id: ~ 24 | fragments: ~ 25 | http_method_override: true 26 | 27 | # Twig Configuration 28 | twig: 29 | debug: "%kernel.debug%" 30 | strict_variables: "%kernel.debug%" 31 | 32 | # Assetic Configuration 33 | assetic: 34 | debug: "%kernel.debug%" 35 | use_controller: false 36 | bundles: [ ] 37 | #java: /usr/bin/java 38 | filters: 39 | cssrewrite: ~ 40 | #closure: 41 | # jar: "%kernel.root_dir%/Resources/java/compiler.jar" 42 | #yui_css: 43 | # jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar" 44 | 45 | # Doctrine Configuration 46 | doctrine: 47 | dbal: 48 | driver: "%database_driver%" 49 | host: "%database_host%" 50 | port: "%database_port%" 51 | dbname: "%database_name%" 52 | user: "%database_user%" 53 | password: "%database_password%" 54 | charset: UTF8 55 | # if using pdo_sqlite as your database driver, add the path in parameters.yml 56 | # e.g. database_path: "%kernel.root_dir%/data/data.db3" 57 | # path: "%database_path%" 58 | 59 | orm: 60 | auto_generate_proxy_classes: "%kernel.debug%" 61 | auto_mapping: true 62 | 63 | # Swiftmailer Configuration 64 | swiftmailer: 65 | transport: "%mailer_transport%" 66 | host: "%mailer_host%" 67 | username: "%mailer_user%" 68 | password: "%mailer_password%" 69 | spool: { type: memory } 70 | 71 | doctrine_mongodb: 72 | connections: 73 | default: 74 | server: "%mongodb_server%" 75 | options: 76 | password: "%mongodb_password%" 77 | username: "%mongodb_username%" 78 | default_database: "%mongodb_database%" 79 | document_managers: 80 | default: 81 | auto_mapping: true 82 | 83 | ekino_new_relic: 84 | enabled: false 85 | application_name: "%new_relic_application_name%" 86 | api_key: "%new_relic_api_key%" 87 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Resources/public/css/demo.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-size: 14px; 3 | font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; 4 | } 5 | h1.title { 6 | font-size: 45px; 7 | padding-bottom: 30px; 8 | } 9 | .sf-reset h2 { 10 | font-weight: bold; 11 | color: #FFFFFF; 12 | /* Font is duplicated of body (sans-serif) */ 13 | font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; 14 | 15 | margin-bottom: 10px; 16 | background-color: #aacd4e; 17 | padding: 2px 4px; 18 | display: inline-block; 19 | text-transform: uppercase; 20 | 21 | } 22 | p { 23 | line-height: 20px; 24 | padding-bottom: 20px; 25 | } 26 | ul#demo-list a { 27 | background: url(../images/blue-arrow.png) no-repeat right 6px; 28 | padding-right: 10px; 29 | margin-right: 30px; 30 | } 31 | #symfony-header { 32 | position: relative; 33 | padding: 30px 30px 20px 30px; 34 | } 35 | .sf-reset .symfony-blocks-welcome { 36 | overflow: hidden; 37 | } 38 | .sf-reset .symfony-blocks-welcome > div { 39 | background-color: whitesmoke; 40 | float: left; 41 | width: 240px; 42 | margin-right: 14px; 43 | text-align: center; 44 | padding: 26px 20px; 45 | } 46 | .sf-reset .symfony-blocks-welcome > div.block-demo { 47 | margin-right: 0; 48 | } 49 | .sf-reset .symfony-blocks-welcome .illustration { 50 | padding-bottom: 20px; 51 | } 52 | .sf-reset .symfony-blocks-help { 53 | overflow: hidden; 54 | } 55 | .sf-reset .symfony-blocks-help { 56 | margin-top: 30px; 57 | padding: 18px; 58 | border: 1px solid #E6E6E6; 59 | } 60 | .sf-reset .symfony-blocks-help > div { 61 | width: 254px; 62 | float: left; 63 | } 64 | .flash-message { 65 | padding: 10px; 66 | margin: 5px; 67 | margin-top: 15px; 68 | background-color: #ffe; 69 | } 70 | .sf-reset .error { 71 | color: red; 72 | } 73 | #login label, #contact_form label { 74 | display: block; 75 | float: left; 76 | width: 90px; 77 | } 78 | .sf-reset ul#menu { 79 | float: right; 80 | margin-bottom: 20px; 81 | padding-left: 0; 82 | } 83 | .sf-reset #menu li { 84 | padding-left: 0; 85 | margin-right: 10px; 86 | display: inline; 87 | } 88 | .sf-reset a, 89 | .sf-reset li a { 90 | color: #08C; 91 | text-decoration: none; 92 | } 93 | .sf-reset a:hover, 94 | .sf-reset li a:hover { 95 | color: #08C; 96 | text-decoration: underline; 97 | } 98 | .sf-reset .symfony-content pre { 99 | white-space: pre; 100 | font-family: monospace; 101 | } 102 | -------------------------------------------------------------------------------- /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 | 9 | RewriteEngine On 10 | 11 | # Determine the RewriteBase automatically and set it as environment variable. 12 | # If you are using Apache aliases to do mass virtual hosting or installed the 13 | # project in a subdirectory, the base path will be prepended to allow proper 14 | # resolution of the app.php file and to redirect to the correct URI. It will 15 | # work in environments without path prefix as well, providing a safe, one-size 16 | # fits all solution. But as you do not need it in this case, you can comment 17 | # the following 2 lines to eliminate the overhead. 18 | RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ 19 | RewriteRule ^(.*) - [E=BASE:%1] 20 | 21 | # Redirect to URI without front controller to prevent duplicate content 22 | # (with and without `/app.php`). Only do this redirect on the initial 23 | # rewrite by Apache and not on subsequent cycles. Otherwise we would get an 24 | # endless redirect loop (request -> rewrite to front controller -> 25 | # redirect -> request -> ...). 26 | # So in case you get a "too many redirects" error or you always get redirected 27 | # to the start page because your Apache does not expose the REDIRECT_STATUS 28 | # environment variable, you have 2 choices: 29 | # - disable this feature by commenting the following 2 lines or 30 | # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the 31 | # following RewriteCond (best solution) 32 | RewriteCond %{ENV:REDIRECT_STATUS} ^$ 33 | RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L] 34 | 35 | # If the requested filename exists, simply serve it. 36 | # We only want to let Apache serve files and not directories. 37 | RewriteCond %{REQUEST_FILENAME} -f 38 | RewriteRule .? - [L] 39 | 40 | # Rewrite all other queries to the front controller. 41 | RewriteRule .? %{ENV:BASE}/app.php [L] 42 | 43 | 44 | 45 | 46 | # When mod_rewrite is not available, we instruct a temporary redirect of 47 | # the start page to the front controller explicitly so that the website 48 | # and the generated links can still be used. 49 | RedirectMatch 302 ^/$ /app.php/ 50 | # RedirectTemp cannot be used instead 51 | 52 | 53 | -------------------------------------------------------------------------------- /.ebextensions/misc/aws-cli-commands-used.md: -------------------------------------------------------------------------------- 1 | # AWS CLI Commands Used 2 | 3 | ## To create a key pair: 4 | 5 | Extract the key from returned response. 6 | 7 | ```bash 8 | aws ec2 create-key-pair --key-name demoapp_prodkey > demoapp_prodkey.pem 9 | ``` 10 | 11 | Change the permissions: 12 | 13 | ```bash 14 | chmod 400 demoapp_prodkey.pem 15 | ``` 16 | 17 | To connect to Amazon Linux (user is `ec2-user`) instance which has the IP of `54.88.29.72`: 18 | 19 | ```bash 20 | ssh -i demoapp_prodkey.pem ec2-user@54.88.29.72 21 | 22 | # To change to root user after login use 23 | sudo su 24 | ``` 25 | 26 | # To delete the key pair 27 | 28 | ```bash 29 | aws ec2 delete-key-pair --key-name demoapp_prodkey 30 | ``` 31 | 32 | ## To create new ElasticBeanstalk application: 33 | 34 | ```bash 35 | aws elasticbeanstalk create-application --application-name demo-app --description "" 36 | ``` 37 | 38 | ## To get a list of available solutions stacks: 39 | 40 | ```bash 41 | aws elasticbeanstalk list-available-solution-stacks 42 | 43 | # or filtered 64 bit PHP stacks 44 | aws elasticbeanstalk list-available-solution-stacks | grep -i 64bit.*PHP 45 | ``` 46 | 47 | ## To create new ElasticBeanstalk environment: 48 | 49 | ```bash 50 | aws elasticbeanstalk create-environment \ 51 | --application-name demo-app \ 52 | --environment-name demo-prod-env \ 53 | --description "" \ 54 | --option-settings file://.ebextensions/env/prod-single.json \ 55 | --solution-stack-name "64bit Amazon Linux 2014.03 v1.0.4 running PHP 5.5" 56 | ``` 57 | 58 | ## To update existing ElasticBeanstalk environment: 59 | 60 | ```bash 61 | aws elasticbeanstalk update-environment \ 62 | --environment-name demo-prod-env \ 63 | --option-settings file://.ebextensions/env/prod-variables.json 64 | 65 | # environment options can also be updated without using a file, as an example 66 | aws elasticbeanstalk update-environment \ 67 | --environment-name demo-prod-env \ 68 | --option-settings \ 69 | Namespace=aws:elasticbeanstalk:application:environment,OptionName=AWS_ACCESS_KEY_ID,Value= \ 70 | Namespace=aws:elasticbeanstalk:application:environment,OptionName=AWS_SECRET_KEY,Value= 71 | ``` 72 | 73 | ## To create an IAM role: 74 | 75 | ```bash 76 | aws iam create-instance-profile \ 77 | --instance-profile-name aws-elasticbeanstalk-ec2-role 78 | 79 | aws iam create-role \ 80 | --role-name aws-elasticbeanstalk-ec2-role \ 81 | --assume-role-policy-document file://./.ebxtensions/misc/aws-elasticbeanstalk-ec2-role-trust-policy.json 82 | 83 | aws iam add-role-to-instance-profile \ 84 | --instance-profile-name aws-elasticbeanstalk-ec2-role \ 85 | --role-name aws-elasticbeanstalk-ec2-role 86 | ``` 87 | 88 | ## To create a user for git aws.push 89 | 90 | ```bash 91 | aws iam create-group --group-name gitAwsPush 92 | 93 | aws iam put-group-policy \ 94 | --group-name gitAwsPush \ 95 | --policy-document file://./.ebextensions/misc/gitAwsPush-Group-Policy.json \ 96 | --policy-name gitAwsPush-Group-Policy 97 | 98 | aws iam create-user --user-name eb 99 | 100 | aws iam add-user-to-group --user-name eb --group-name gitAwsPush 101 | ``` 102 | 103 | ## To delete the environment 104 | 105 | ```bash 106 | aws elasticbeanstalk terminate-environment \ 107 | --environment-name demo-prod-env \ 108 | --terminate-resources 109 | ``` 110 | 111 | # To delete the application 112 | 113 | ```bash 114 | aws elasticbeanstalk delete-application \ 115 | --application-name demo-app \ 116 | --terminate-env-by-force 117 | ``` 118 | -------------------------------------------------------------------------------- /src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'AcmeDemoBundle::layout.html.twig' %} 2 | 3 | {% block title %}Symfony - Welcome{% endblock %} 4 | 5 | {% block content_header '' %} 6 | 7 | {% block content %} 8 | {% set version = constant('Symfony\\Component\\HttpKernel\\Kernel::MAJOR_VERSION') ~ '.' ~ constant('Symfony\\Component\\HttpKernel\\Kernel::MINOR_VERSION')%} 9 | 10 |

    Welcome!

    11 | 12 |

    Congratulations! You have successfully installed a new Symfony application.

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