├── 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 |
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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------