From 295cb6053c45db296356fe69351a69659f06645c Mon Sep 17 00:00:00 2001
From: Cayetano
Date: Sun, 11 Nov 2012 03:40:34 +0100
Subject: [PATCH] initial commit
---
.gitignore | 7 +
.travis.yml | 10 +
LICENSE | 19 +
README.md | 176 +++
UPGRADE.md | 252 ++++
app/.htaccess | 1 +
app/AppCache.php | 9 +
app/AppKernel.php | 38 +
app/Resources/views/base.html.twig | 13 +
app/SymfonyRequirements.php | 638 +++++++++
app/autoload.php | 16 +
app/check.php | 55 +
app/config/config.yml | 59 +
app/config/config_dev.yml | 26 +
app/config/config_prod.yml | 19 +
app/config/config_test.yml | 14 +
app/config/parameters.yml | 15 +
app/config/routing.yml | 4 +
app/config/routing_dev.yml | 27 +
app/config/security.yml | 43 +
app/console | 22 +
app/phpunit.xml.dist | 41 +
composer.json | 41 +
composer.lock | 1213 +++++++++++++++++
src/.htaccess | 1 +
src/Acme/DemoBundle/AcmeDemoBundle.php | 9 +
.../DemoBundle/Controller/DemoController.php | 57 +
.../Controller/SecuredController.php | 69 +
.../Controller/WelcomeController.php | 18 +
.../DependencyInjection/AcmeDemoExtension.php | 22 +
.../EventListener/ControllerListener.php | 25 +
src/Acme/DemoBundle/Form/ContactType.php | 20 +
.../DemoBundle/Resources/config/services.xml | 18 +
.../DemoBundle/Resources/public/css/demo.css | 294 ++++
.../Resources/public/images/blue-arrow.png | Bin 0 -> 181 bytes
.../public/images/field-background.gif | Bin 0 -> 63 bytes
.../Resources/public/images/logo.gif | Bin 0 -> 1698 bytes
.../Resources/public/images/search.png | Bin 0 -> 737 bytes
.../public/images/welcome-configure.gif | Bin 0 -> 3530 bytes
.../Resources/public/images/welcome-demo.gif | Bin 0 -> 4053 bytes
.../public/images/welcome-quick-tour.gif | Bin 0 -> 4770 bytes
.../Resources/views/Demo/contact.html.twig | 15 +
.../Resources/views/Demo/hello.html.twig | 9 +
.../Resources/views/Demo/index.html.twig | 14 +
.../Resources/views/Secured/hello.html.twig | 11 +
.../views/Secured/helloadmin.html.twig | 9 +
.../Resources/views/Secured/layout.html.twig | 6 +
.../Resources/views/Secured/login.html.twig | 29 +
.../Resources/views/Welcome/index.html.twig | 65 +
.../Resources/views/layout.html.twig | 49 +
.../Tests/Controller/DemoControllerTest.php | 17 +
.../Twig/Extension/DemoExtension.php | 80 ++
web/.htaccess | 10 +
web/app.php | 24 +
web/app_dev.php | 30 +
web/apple-touch-icon.png | Bin 0 -> 10784 bytes
web/config.php | 98 ++
web/favicon.ico | Bin 0 -> 1150 bytes
web/robots.txt | 4 +
59 files changed, 3761 insertions(+)
create mode 100644 .gitignore
create mode 100644 .travis.yml
create mode 100644 LICENSE
create mode 100644 README.md
create mode 100644 UPGRADE.md
create mode 100644 app/.htaccess
create mode 100644 app/AppCache.php
create mode 100644 app/AppKernel.php
create mode 100644 app/Resources/views/base.html.twig
create mode 100644 app/SymfonyRequirements.php
create mode 100644 app/autoload.php
create mode 100644 app/check.php
create mode 100644 app/config/config.yml
create mode 100644 app/config/config_dev.yml
create mode 100644 app/config/config_prod.yml
create mode 100644 app/config/config_test.yml
create mode 100644 app/config/parameters.yml
create mode 100644 app/config/routing.yml
create mode 100644 app/config/routing_dev.yml
create mode 100644 app/config/security.yml
create mode 100644 app/console
create mode 100644 app/phpunit.xml.dist
create mode 100644 composer.json
create mode 100644 composer.lock
create mode 100644 src/.htaccess
create mode 100644 src/Acme/DemoBundle/AcmeDemoBundle.php
create mode 100644 src/Acme/DemoBundle/Controller/DemoController.php
create mode 100644 src/Acme/DemoBundle/Controller/SecuredController.php
create mode 100644 src/Acme/DemoBundle/Controller/WelcomeController.php
create mode 100644 src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php
create mode 100644 src/Acme/DemoBundle/EventListener/ControllerListener.php
create mode 100644 src/Acme/DemoBundle/Form/ContactType.php
create mode 100644 src/Acme/DemoBundle/Resources/config/services.xml
create mode 100644 src/Acme/DemoBundle/Resources/public/css/demo.css
create mode 100644 src/Acme/DemoBundle/Resources/public/images/blue-arrow.png
create mode 100644 src/Acme/DemoBundle/Resources/public/images/field-background.gif
create mode 100644 src/Acme/DemoBundle/Resources/public/images/logo.gif
create mode 100644 src/Acme/DemoBundle/Resources/public/images/search.png
create mode 100644 src/Acme/DemoBundle/Resources/public/images/welcome-configure.gif
create mode 100644 src/Acme/DemoBundle/Resources/public/images/welcome-demo.gif
create mode 100644 src/Acme/DemoBundle/Resources/public/images/welcome-quick-tour.gif
create mode 100644 src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig
create mode 100644 src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig
create mode 100644 src/Acme/DemoBundle/Resources/views/Demo/index.html.twig
create mode 100644 src/Acme/DemoBundle/Resources/views/Secured/hello.html.twig
create mode 100644 src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig
create mode 100644 src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig
create mode 100644 src/Acme/DemoBundle/Resources/views/Secured/login.html.twig
create mode 100644 src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig
create mode 100644 src/Acme/DemoBundle/Resources/views/layout.html.twig
create mode 100644 src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php
create mode 100644 src/Acme/DemoBundle/Twig/Extension/DemoExtension.php
create mode 100644 web/.htaccess
create mode 100644 web/app.php
create mode 100644 web/app_dev.php
create mode 100644 web/apple-touch-icon.png
create mode 100644 web/config.php
create mode 100644 web/favicon.ico
create mode 100644 web/robots.txt
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e984ef6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+web/bundles/
+app/bootstrap.php.cache
+app/cache/*
+app/logs/*
+build/
+vendor
+composer.phar
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..8d9c285
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,10 @@
+language: php
+
+php:
+ - 5.3.3
+ - 5.3
+ - 5.4
+
+before_script: composer install
+
+script: phpunit -c app
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..cdffe7a
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2004-2012 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b70ed05
--- /dev/null
+++ b/README.md
@@ -0,0 +1,176 @@
+Symfony Standard Edition
+========================
+
+Welcome to the Symfony Standard Edition - a fully-functional Symfony2
+application that you can use as the skeleton for your new applications.
+
+This document contains information on how to download, install, and start
+using Symfony. For a more detailed explanation, see the [Installation][1]
+chapter of the Symfony Documentation.
+
+1) Installing the Standard Edition
+----------------------------------
+
+When it comes to installing the Symfony Standard Edition, you have the
+following options.
+
+### Use Composer (*recommended*)
+
+As Symfony uses [Composer][2] to manage its dependencies, the recommended way
+to create a new project is to use it.
+
+If you don't have Composer yet, download it following the instructions on
+http://getcomposer.org/ or just run the following command:
+
+ curl -s https://getcomposer.org/installer | php
+
+Then, use the `create-project` command to generate a new Symfony application:
+
+ php composer.phar create-project symfony/framework-standard-edition path/to/install 2.1.x-dev
+
+For an exact version, replace 2.1.x-dev with the latest Symfony version (e.g. 2.1.1).
+
+Composer will install Symfony and all its dependencies under the
+`path/to/install` directory.
+
+### Download an Archive File
+
+To quickly test Symfony, you can also download an [archive][3] of the Standard
+Edition and unpack it somewhere under your web server root directory.
+
+If you downloaded an archive "without vendors", you also need to install all
+the necessary dependencies. Download composer (see above) and run the
+following command:
+
+ php composer.phar install
+
+2) Checking your System Configuration
+-------------------------------------
+
+Before starting coding, make sure that your local system is properly
+configured for Symfony.
+
+Execute the `check.php` script from the command line:
+
+ php app/check.php
+
+Access the `config.php` script from a browser:
+
+ http://localhost/path/to/symfony/app/web/config.php
+
+If you get any warnings or recommendations, fix them before moving on.
+
+3) Browsing the Demo Application
+--------------------------------
+
+Congratulations! You're now ready to use Symfony.
+
+From the `config.php` page, click the "Bypass configuration and go to the
+Welcome page" link to load up your first Symfony page.
+
+You can also use a web-based configurator by clicking on the "Configure your
+Symfony Application online" link of the `config.php` page.
+
+To see a real-live Symfony page in action, access the following page:
+
+ web/app_dev.php/demo/hello/Fabien
+
+4) Getting started with Symfony
+-------------------------------
+
+This distribution is meant to be the starting point for your Symfony
+applications, but it also contains some sample code that you can learn from
+and play with.
+
+A great way to start learning Symfony is via the [Quick Tour][4], which will
+take you through all the basic features of Symfony2.
+
+Once you're feeling good, you can move onto reading the official
+[Symfony2 book][5].
+
+A default bundle, `AcmeDemoBundle`, shows you Symfony2 in action. After
+playing with it, you can remove it by following these steps:
+
+ * delete the `src/Acme` directory;
+
+ * remove the routing entries referencing AcmeBundle in
+ `app/config/routing_dev.yml`;
+
+ * remove the AcmeBundle from the registered bundles in `app/AppKernel.php`;
+
+ * remove the `web/bundles/acmedemo` directory;
+
+ * remove the `security.providers`, `security.firewalls.login` and
+ `security.firewalls.secured_area` entries in the `security.yml` file or
+ tweak the security configuration to fit your needs.
+
+What's inside?
+---------------
+
+The Symfony Standard Edition is configured with the following defaults:
+
+ * Twig is the only configured template engine;
+
+ * Doctrine ORM/DBAL is configured;
+
+ * Swiftmailer is configured;
+
+ * Annotations for everything are enabled.
+
+It comes pre-configured with the following bundles:
+
+ * **FrameworkBundle** - The core Symfony framework bundle
+
+ * [**SensioFrameworkExtraBundle**][6] - Adds several enhancements, including
+ template and routing annotation capability
+
+ * [**DoctrineBundle**][7] - Adds support for the Doctrine ORM
+
+ * [**TwigBundle**][8] - Adds support for the Twig templating engine
+
+ * [**SecurityBundle**][9] - Adds security by integrating Symfony's security
+ component
+
+ * [**SwiftmailerBundle**][10] - Adds support for Swiftmailer, a library for
+ sending emails
+
+ * [**MonologBundle**][11] - Adds support for Monolog, a logging library
+
+ * [**AsseticBundle**][12] - Adds support for Assetic, an asset processing
+ library
+
+ * [**JMSSecurityExtraBundle**][13] - Allows security to be added via
+ annotations
+
+ * [**JMSDiExtraBundle**][14] - Adds more powerful dependency injection
+ features
+
+ * **WebProfilerBundle** (in dev/test env) - Adds profiling functionality and
+ the web debug toolbar
+
+ * **SensioDistributionBundle** (in dev/test env) - Adds functionality for
+ configuring and working with Symfony distributions
+
+ * [**SensioGeneratorBundle**][15] (in dev/test env) - Adds code generation
+ capabilities
+
+ * **AcmeDemoBundle** (in dev/test env) - A demo bundle with some example
+ code
+
+Enjoy!
+
+[1]: http://symfony.com/doc/2.1/book/installation.html
+[2]: http://getcomposer.org/
+[3]: http://symfony.com/download
+[4]: http://symfony.com/doc/2.1/quick_tour/the_big_picture.html
+[5]: http://symfony.com/doc/2.1/index.html
+[6]: http://symfony.com/doc/2.1/bundles/SensioFrameworkExtraBundle/index.html
+[7]: http://symfony.com/doc/2.1/book/doctrine.html
+[8]: http://symfony.com/doc/2.1/book/templating.html
+[9]: http://symfony.com/doc/2.1/book/security.html
+[10]: http://symfony.com/doc/2.1/cookbook/email.html
+[11]: http://symfony.com/doc/2.1/cookbook/logging/monolog.html
+[12]: http://symfony.com/doc/2.1/cookbook/assetic/asset_management.html
+[13]: http://jmsyst.com/bundles/JMSSecurityExtraBundle/master
+[14]: http://jmsyst.com/bundles/JMSDiExtraBundle/master
+[15]: http://symfony.com/doc/2.1/bundles/SensioGeneratorBundle/index.html
diff --git a/UPGRADE.md b/UPGRADE.md
new file mode 100644
index 0000000..caa467a
--- /dev/null
+++ b/UPGRADE.md
@@ -0,0 +1,252 @@
+Symfony Standard Edition Upgrade
+================================
+
+From Symfony 2.0 to Symfony 2.1
+-------------------------------
+
+### Project Dependencies
+
+As of Symfony 2.1, project dependencies are managed by
+[Composer](http://getcomposer.org/):
+
+* The `bin/vendors` script can be removed as `composer.phar` does all the work
+ now (it is recommended to install it globally on your machine).
+
+* The `deps` file need to be replaced with the `composer.json` one.
+
+* The `composer.lock` is the equivalent of the generated `deps.lock` file and
+ it is automatically generated by Composer.
+
+Download the default
+[`composer.json`](https://raw.github.com/symfony/symfony-standard/master/composer.json)
+and
+[`composer.lock`](https://raw.github.com/symfony/symfony-standard/master/composer.lock)
+files for Symfony 2.1 and put them into the main directory of your project. If
+you have customized your `deps` file, move the added dependencies to the
+`composer.json` file (many bundles and PHP libraries are already available as
+Composer packages -- search for them on [Packagist](http://packagist.org/)).
+
+Remove your current `vendor` directory.
+
+Finally, run Composer:
+
+ $ composer.phar install
+
+### `app/autoload.php`
+
+The default `autoload.php` reads as follows (it has been simplified a lot as
+autoloading for libraries and bundles declared in your `composer.json` file is
+automatically managed by the Composer autoloader):
+
+ add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
+ }
+
+ AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
+
+ return $loader;
+
+### `app/config/config.yml`
+
+The `framework.charset` setting must be removed. If you are not using `UTF-8`
+for your application, override the `getCharset()` method in your `AppKernel`
+class instead:
+
+ class AppKernel extends Kernel
+ {
+ public function getCharset()
+ {
+ return 'ISO-8859-1';
+ }
+
+ // ...
+ }
+
+You might want to add the new `strict_requirements` parameter to
+`framework.router` (it avoids fatal errors in the production environment when
+a link cannot be generated):
+
+ framework:
+ router:
+ strict_requirements: "%kernel.debug%"
+
+The `default_locale` parameter is now a setting of the main `framework`
+configuration (it was under the `framework.session` in 2.0):
+
+ framework:
+ default_locale: "%locale%"
+
+The `auto_start` setting under `framework.session` must be removed as it is
+not used anymore (the session is now always started on-demand). If
+`auto_start` was the only setting under the `framework.session` entry, don't
+remove it entirely, but set its value to `~` (`~` means `null` in YAML)
+instead:
+
+ framework:
+ session: ~
+
+The `trust_proxy_headers` setting was added in the default configuration file
+(as it should be set to `true` when you install your application behind a
+reverse proxy):
+
+ framework:
+ trust_proxy_headers: false
+
+An empty `bundles` entry was added to the `assetic` configuration:
+
+ assetic:
+ bundles: []
+
+The default `swiftmailer` configuration now has the `spool` setting configured
+to the `memory` type to defer email sending after the response is sent to the
+user (recommended for better end-user performance):
+
+ swiftmailer:
+ spool: { type: memory }
+
+The `jms_security_extra` configuration was moved to the `security.yml`
+configuration file.
+
+### `app/config/config_dev.yml`
+
+An example of how to send all emails to a unique address was added:
+
+ #swiftmailer:
+ # delivery_address: me@example.com
+
+### `app/config/config_test.yml`
+
+The `storage_id` setting must be changed to `session.storage.mock_file`:
+
+ framework:
+ session:
+ storage_id: session.storage.mock_file
+
+### `app/config/parameters.ini`
+
+The file has been converted to a YAML file which reads as follows:
+
+ parameters:
+ database_driver: pdo_mysql
+ database_host: localhost
+ database_port: ~
+ database_name: symfony
+ database_user: root
+ database_password: ~
+
+ mailer_transport: smtp
+ mailer_host: localhost
+ mailer_user: ~
+ mailer_password: ~
+
+ locale: en
+ secret: ThisTokenIsNotSoSecretChangeIt
+
+Note that if you convert your parameters file to YAML, you must also change
+its reference in `app/config/config.yml`.
+
+### `app/config/routing_dev.yml`
+
+The `_assetic` entry was removed:
+
+ #_assetic:
+ # resource: .
+ # type: assetic
+
+### `app/config/security.yml`
+
+Under `security.access_control`, the default rule for internal routes was changed:
+
+ security:
+ access_control:
+ #- { path: ^/_internal/secure, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
+
+Under `security.providers`, the `in_memory` example was updated to the following:
+
+ security:
+ providers:
+ in_memory:
+ memory:
+ users:
+ user: { password: userpass, roles: [ 'ROLE_USER' ] }
+ admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
+
+### `app/AppKernel.php`
+
+The following bundles have been added to the list of default registered bundles:
+
+ new JMS\AopBundle\JMSAopBundle(),
+ new JMS\DiExtraBundle\JMSDiExtraBundle($this),
+
+### `web/app.php`
+
+The default `web/app.php` file now reads as follows:
+
+ register(true);
+ */
+
+ require_once __DIR__.'/../app/AppKernel.php';
+ //require_once __DIR__.'/../app/AppCache.php';
+
+ $kernel = new AppKernel('prod', false);
+ $kernel->loadClassCache();
+ //$kernel = new AppCache($kernel);
+ $request = Request::createFromGlobals();
+ $response = $kernel->handle($request);
+ $response->send();
+ $kernel->terminate($request, $response);
+
+### `web/app_dev.php`
+
+The default `web/app_dev.php` file now reads as follows:
+
+ loadClassCache();
+ $request = Request::createFromGlobals();
+ $response = $kernel->handle($request);
+ $response->send();
+ $kernel->terminate($request, $response);
diff --git a/app/.htaccess b/app/.htaccess
new file mode 100644
index 0000000..3418e55
--- /dev/null
+++ b/app/.htaccess
@@ -0,0 +1 @@
+deny from all
\ No newline at end of file
diff --git a/app/AppCache.php b/app/AppCache.php
new file mode 100644
index 0000000..ddb51db
--- /dev/null
+++ b/app/AppCache.php
@@ -0,0 +1,9 @@
+getEnvironment(), array('dev', 'test'))) {
+ $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
+ $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
+ $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
+ $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
+ }
+
+ return $bundles;
+ }
+
+ public function registerContainerConfiguration(LoaderInterface $loader)
+ {
+ $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
+ }
+}
diff --git a/app/Resources/views/base.html.twig b/app/Resources/views/base.html.twig
new file mode 100644
index 0000000..bafd28d
--- /dev/null
+++ b/app/Resources/views/base.html.twig
@@ -0,0 +1,13 @@
+
+
+
+
+ {% block title %}Welcome!{% endblock %}
+ {% block stylesheets %}{% endblock %}
+
+
+
+ {% block body %}{% endblock %}
+ {% block javascripts %}{% endblock %}
+
+
diff --git a/app/SymfonyRequirements.php b/app/SymfonyRequirements.php
new file mode 100644
index 0000000..4df46d1
--- /dev/null
+++ b/app/SymfonyRequirements.php
@@ -0,0 +1,638 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/*
+ * Users of PHP 5.2 should be able to run the requirements checks.
+ * This is why the file and all classes must be compatible with PHP 5.2+
+ * (e.g. not using namespaces and closures).
+ *
+ * ************** CAUTION **************
+ *
+ * DO NOT EDIT THIS FILE as it will be overriden by Composer as part of
+ * the installation/update process. The original file resides in the
+ * SensioDistributionBundle.
+ *
+ * ************** CAUTION **************
+ */
+
+/**
+ * Represents a single PHP requirement, e.g. an installed extension.
+ * It can be a mandatory requirement or an optional recommendation.
+ * There is a special subclass, named PhpIniRequirement, to check a php.ini configuration.
+ *
+ * @author Tobias Schultze
+ */
+class Requirement
+{
+ private $fulfilled;
+ private $testMessage;
+ private $helpText;
+ private $helpHtml;
+ private $optional;
+
+ /**
+ * Constructor that initializes the requirement.
+ *
+ * @param Boolean $fulfilled Whether the requirement is fulfilled
+ * @param string $testMessage The message for testing the requirement
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ * @param Boolean $optional Whether this is only an optional recommendation not a mandatory requirement
+ */
+ public function __construct($fulfilled, $testMessage, $helpHtml, $helpText = null, $optional = false)
+ {
+ $this->fulfilled = (Boolean) $fulfilled;
+ $this->testMessage = (string) $testMessage;
+ $this->helpHtml = (string) $helpHtml;
+ $this->helpText = null === $helpText ? strip_tags($this->helpHtml) : (string) $helpText;
+ $this->optional = (Boolean) $optional;
+ }
+
+ /**
+ * Returns whether the requirement is fulfilled.
+ *
+ * @return Boolean true if fulfilled, otherwise false
+ */
+ public function isFulfilled()
+ {
+ return $this->fulfilled;
+ }
+
+ /**
+ * Returns the message for testing the requirement.
+ *
+ * @return string The test message
+ */
+ public function getTestMessage()
+ {
+ return $this->testMessage;
+ }
+
+ /**
+ * Returns the help text for resolving the problem
+ *
+ * @return string The help text
+ */
+ public function getHelpText()
+ {
+ return $this->helpText;
+ }
+
+ /**
+ * Returns the help text formatted in HTML.
+ *
+ * @return string The HTML help
+ */
+ public function getHelpHtml()
+ {
+ return $this->helpHtml;
+ }
+
+ /**
+ * Returns whether this is only an optional recommendation and not a mandatory requirement.
+ *
+ * @return Boolean true if optional, false if mandatory
+ */
+ public function isOptional()
+ {
+ return $this->optional;
+ }
+}
+
+/**
+ * Represents a PHP requirement in form of a php.ini configuration.
+ *
+ * @author Tobias Schultze
+ */
+class PhpIniRequirement extends Requirement
+{
+ /**
+ * Constructor that initializes the requirement.
+ *
+ * @param string $cfgName The configuration name used for ini_get()
+ * @param Boolean|callback $evaluation Either a Boolean indicating whether the configuration should evaluate to true or false,
+ or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement
+ * @param Boolean $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false.
+ This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin.
+ Example: You require a config to be true but PHP later removes this config and defaults it to true internally.
+ * @param string|null $testMessage The message for testing the requirement (when null and $evaluation is a Boolean a default message is derived)
+ * @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)
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ * @param Boolean $optional Whether this is only an optional recommendation not a mandatory requirement
+ */
+ public function __construct($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null, $optional = false)
+ {
+ $cfgValue = ini_get($cfgName);
+
+ if (is_callable($evaluation)) {
+ if (null === $testMessage || null === $helpHtml) {
+ throw new InvalidArgumentException('You must provide the parameters testMessage and helpHtml for a callback evaluation.');
+ }
+
+ $fulfilled = call_user_func($evaluation, $cfgValue);
+ } else {
+ if (null === $testMessage) {
+ $testMessage = sprintf('%s %s be %s in php.ini',
+ $cfgName,
+ $optional ? 'should' : 'must',
+ $evaluation ? 'enabled' : 'disabled'
+ );
+ }
+
+ if (null === $helpHtml) {
+ $helpHtml = sprintf('Set %s to %s in php.ini*.',
+ $cfgName,
+ $evaluation ? 'on' : 'off'
+ );
+ }
+
+ $fulfilled = $evaluation == $cfgValue;
+ }
+
+ parent::__construct($fulfilled || ($approveCfgAbsence && false === $cfgValue), $testMessage, $helpHtml, $helpText, $optional);
+ }
+}
+
+/**
+ * A RequirementCollection represents a set of Requirement instances.
+ *
+ * @author Tobias Schultze
+ */
+class RequirementCollection implements IteratorAggregate
+{
+ private $requirements = array();
+
+ /**
+ * Gets the current RequirementCollection as an Iterator.
+ *
+ * @return Traversable A Traversable interface
+ */
+ public function getIterator()
+ {
+ return new ArrayIterator($this->requirements);
+ }
+
+ /**
+ * Adds a Requirement.
+ *
+ * @param Requirement $requirement A Requirement instance
+ */
+ public function add(Requirement $requirement)
+ {
+ $this->requirements[] = $requirement;
+ }
+
+ /**
+ * Adds a mandatory requirement.
+ *
+ * @param Boolean $fulfilled Whether the requirement is fulfilled
+ * @param string $testMessage The message for testing the requirement
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addRequirement($fulfilled, $testMessage, $helpHtml, $helpText = null)
+ {
+ $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, false));
+ }
+
+ /**
+ * Adds an optional recommendation.
+ *
+ * @param Boolean $fulfilled Whether the recommendation is fulfilled
+ * @param string $testMessage The message for testing the recommendation
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addRecommendation($fulfilled, $testMessage, $helpHtml, $helpText = null)
+ {
+ $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, true));
+ }
+
+ /**
+ * Adds a mandatory requirement in form of a php.ini configuration.
+ *
+ * @param string $cfgName The configuration name used for ini_get()
+ * @param Boolean|callback $evaluation Either a Boolean indicating whether the configuration should evaluate to true or false,
+ or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement
+ * @param Boolean $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false.
+ This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin.
+ Example: You require a config to be true but PHP later removes this config and defaults it to true internally.
+ * @param string $testMessage The message for testing the requirement (when null and $evaluation is a Boolean a default message is derived)
+ * @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)
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addPhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null)
+ {
+ $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, false));
+ }
+
+ /**
+ * Adds an optional recommendation in form of a php.ini configuration.
+ *
+ * @param string $cfgName The configuration name used for ini_get()
+ * @param Boolean|callback $evaluation Either a Boolean indicating whether the configuration should evaluate to true or false,
+ or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement
+ * @param Boolean $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false.
+ This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin.
+ Example: You require a config to be true but PHP later removes this config and defaults it to true internally.
+ * @param string $testMessage The message for testing the requirement (when null and $evaluation is a Boolean a default message is derived)
+ * @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)
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addPhpIniRecommendation($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null)
+ {
+ $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, true));
+ }
+
+ /**
+ * Adds a requirement collection to the current set of requirements.
+ *
+ * @param RequirementCollection $collection A RequirementCollection instance
+ */
+ public function addCollection(RequirementCollection $collection)
+ {
+ $this->requirements = array_merge($this->requirements, $collection->all());
+ }
+
+ /**
+ * Returns both requirements and recommendations.
+ *
+ * @return array Array of Requirement instances
+ */
+ public function all()
+ {
+ return $this->requirements;
+ }
+
+ /**
+ * Returns all mandatory requirements.
+ *
+ * @return array Array of Requirement instances
+ */
+ public function getRequirements()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if (!$req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns the mandatory requirements that were not met.
+ *
+ * @return array Array of Requirement instances
+ */
+ public function getFailedRequirements()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if (!$req->isFulfilled() && !$req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns all optional recommmendations.
+ *
+ * @return array Array of Requirement instances
+ */
+ public function getRecommendations()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if ($req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns the recommendations that were not met.
+ *
+ * @return array Array of Requirement instances
+ */
+ public function getFailedRecommendations()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if (!$req->isFulfilled() && $req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns whether a php.ini configuration is not correct.
+ *
+ * @return Boolean php.ini configuration problem?
+ */
+ public function hasPhpIniConfigIssue()
+ {
+ foreach ($this->requirements as $req) {
+ if (!$req->isFulfilled() && $req instanceof PhpIniRequirement) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns the PHP configuration file (php.ini) path.
+ *
+ * @return string|false php.ini file path
+ */
+ public function getPhpIniConfigPath()
+ {
+ return get_cfg_var('cfg_file_path');
+ }
+}
+
+/**
+ * This class specifies all requirements and optional recommendations that
+ * are necessary to run the Symfony Standard Edition.
+ *
+ * @author Tobias Schultze
+ * @author Fabien Potencier
+ */
+class SymfonyRequirements extends RequirementCollection
+{
+ const REQUIRED_PHP_VERSION = '5.3.3';
+
+ /**
+ * Constructor that initializes the requirements.
+ */
+ public function __construct()
+ {
+ /* mandatory requirements follow */
+
+ $installedPhpVersion = phpversion();
+
+ $this->addRequirement(
+ version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>='),
+ sprintf('PHP version must be at least %s (%s installed)', self::REQUIRED_PHP_VERSION, $installedPhpVersion),
+ sprintf('You are running PHP version "%s", but Symfony needs at least PHP "%s" to run.
+ Before using Symfony, upgrade your PHP installation, preferably to the latest version.',
+ $installedPhpVersion, self::REQUIRED_PHP_VERSION),
+ sprintf('Install PHP %s or newer (installed version is %s)', self::REQUIRED_PHP_VERSION, $installedPhpVersion)
+ );
+
+ $this->addRequirement(
+ version_compare($installedPhpVersion, '5.3.16', '!='),
+ 'PHP version must not be 5.3.16 as Symfony won\'t work properly with it',
+ 'Install PHP 5.3.17 or newer (or downgrade to an earlier PHP version)'
+ );
+
+ $this->addRequirement(
+ is_dir(__DIR__.'/../vendor/composer'),
+ 'Vendor libraries must be installed',
+ 'Vendor libraries are missing. Install composer following instructions from http://getcomposer.org/. ' .
+ 'Then run "php composer.phar install" to install them.'
+ );
+
+ $baseDir = basename(__DIR__);
+
+ $this->addRequirement(
+ is_writable(__DIR__.'/cache'),
+ "$baseDir/cache/ directory must be writable",
+ "Change the permissions of the \"$baseDir/cache/\" directory so that the web server can write into it."
+ );
+
+ $this->addRequirement(
+ is_writable(__DIR__.'/logs'),
+ "$baseDir/logs/ directory must be writable",
+ "Change the permissions of the \"$baseDir/logs/\" directory so that the web server can write into it."
+ );
+
+ $this->addPhpIniRequirement(
+ 'date.timezone', true, false,
+ 'date.timezone setting must be set',
+ 'Set the "date.timezone" setting in php.ini* (like Europe/Paris).'
+ );
+
+ if (version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>=')) {
+ $this->addRequirement(
+ (in_array(date_default_timezone_get(), DateTimeZone::listIdentifiers())),
+ sprintf('Configured default timezone "%s" must be supported by your installation of PHP', date_default_timezone_get()),
+ '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.'
+ );
+ }
+
+ $this->addRequirement(
+ function_exists('json_encode'),
+ 'json_encode() must be available',
+ 'Install and enable the JSON extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('session_start'),
+ 'session_start() must be available',
+ 'Install and enable the session extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('ctype_alpha'),
+ 'ctype_alpha() must be available',
+ 'Install and enable the ctype extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('token_get_all'),
+ 'token_get_all() must be available',
+ 'Install and enable the Tokenizer extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('simplexml_import_dom'),
+ 'simplexml_import_dom() must be available',
+ 'Install and enable the SimpleXML extension.'
+ );
+
+ if (function_exists('apc_store') && ini_get('apc.enabled')) {
+ $this->addRequirement(
+ version_compare(phpversion('apc'), '3.0.17', '>='),
+ 'APC version must be at least 3.0.17',
+ 'Upgrade your APC extension (3.0.17+).'
+ );
+ }
+
+ $this->addPhpIniRequirement('detect_unicode', false);
+
+ if (extension_loaded('suhosin')) {
+ $this->addPhpIniRequirement(
+ 'suhosin.executor.include.whitelist',
+ create_function('$cfgValue', 'return false !== stripos($cfgValue, "phar");'),
+ false,
+ 'suhosin.executor.include.whitelist must be configured correctly in php.ini',
+ 'Add "phar" to suhosin.executor.include.whitelist in php.ini*.'
+ );
+ }
+
+ if (extension_loaded('xdebug')) {
+ $this->addPhpIniRequirement(
+ 'xdebug.show_exception_trace', false, true
+ );
+
+ $this->addPhpIniRequirement(
+ 'xdebug.scream', false, true
+ );
+ }
+
+ $pcreVersion = defined('PCRE_VERSION') ? (float) PCRE_VERSION : null;
+
+ $this->addRequirement(
+ null !== $pcreVersion && $pcreVersion > 8.0,
+ sprintf('PCRE extension must be available and at least 8.0 (%s installed)', $pcreVersion ? $pcreVersion : 'not'),
+ 'Upgrade your PCRE extension (8.0+).'
+ );
+
+ /* optional recommendations follow */
+
+ $this->addRecommendation(
+ file_get_contents(__FILE__) === file_get_contents(__DIR__.'/../vendor/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle/Resources/skeleton/app/SymfonyRequirements.php'),
+ 'Requirements file should be up-to-date',
+ 'Your requirements file is outdated. Run composer install and re-check your configuration.'
+ );
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.3.4', '>='),
+ 'You should use at least PHP 5.3.4 due to PHP bug #52083 in earlier versions',
+ '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.'
+ );
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.3.8', '>='),
+ 'When using annotations you should have at least PHP 5.3.8 due to PHP bug #55156',
+ 'Install PHP 5.3.8 or newer if your project uses annotations.'
+ );
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.4.0', '!='),
+ 'You should not use PHP 5.4.0 due to the PHP bug #61453',
+ '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.'
+ );
+
+ $this->addRecommendation(
+ class_exists('DomDocument'),
+ 'PHP-XML module should be installed',
+ 'Install and enable the PHP-XML module.'
+ );
+
+ $this->addRecommendation(
+ function_exists('mb_strlen'),
+ 'mb_strlen() should be available',
+ 'Install and enable the mbstring extension.'
+ );
+
+ $this->addRecommendation(
+ function_exists('iconv'),
+ 'iconv() should be available',
+ 'Install and enable the iconv extension.'
+ );
+
+ $this->addRecommendation(
+ function_exists('utf8_decode'),
+ 'utf8_decode() should be available',
+ 'Install and enable the XML extension.'
+ );
+
+ if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
+ $this->addRecommendation(
+ function_exists('posix_isatty'),
+ 'posix_isatty() should be available',
+ 'Install and enable the php_posix extension (used to colorize the CLI output).'
+ );
+ }
+
+ $this->addRecommendation(
+ class_exists('Locale'),
+ 'intl extension should be available',
+ 'Install and enable the intl extension (used for validators).'
+ );
+
+ if (class_exists('Collator')) {
+ $this->addRecommendation(
+ null !== new Collator('fr_FR'),
+ 'intl extension should be correctly configured',
+ 'The intl extension does not behave properly. This problem is typical on PHP 5.3.X x64 WIN builds.'
+ );
+ }
+
+ if (class_exists('Locale')) {
+ if (defined('INTL_ICU_VERSION')) {
+ $version = INTL_ICU_VERSION;
+ } else {
+ $reflector = new ReflectionExtension('intl');
+
+ ob_start();
+ $reflector->info();
+ $output = strip_tags(ob_get_clean());
+
+ preg_match('/^ICU version +(?:=> )?(.*)$/m', $output, $matches);
+ $version = $matches[1];
+ }
+
+ $this->addRecommendation(
+ version_compare($version, '4.0', '>='),
+ 'intl ICU version should be at least 4+',
+ 'Upgrade your intl extension with a newer ICU version (4+).'
+ );
+ }
+
+ $accelerator =
+ (function_exists('apc_store') && ini_get('apc.enabled'))
+ ||
+ function_exists('eaccelerator_put') && ini_get('eaccelerator.enable')
+ ||
+ function_exists('xcache_set')
+ ;
+
+ $this->addRecommendation(
+ $accelerator,
+ 'a PHP accelerator should be installed',
+ 'Install and enable a PHP accelerator like APC (highly recommended).'
+ );
+
+ $this->addPhpIniRecommendation('short_open_tag', false);
+
+ $this->addPhpIniRecommendation('magic_quotes_gpc', false, true);
+
+ $this->addPhpIniRecommendation('register_globals', false, true);
+
+ $this->addPhpIniRecommendation('session.auto_start', false);
+
+ $this->addRecommendation(
+ class_exists('PDO'),
+ 'PDO should be installed',
+ 'Install PDO (mandatory for Doctrine).'
+ );
+
+ if (class_exists('PDO')) {
+ $drivers = PDO::getAvailableDrivers();
+ $this->addRecommendation(
+ count($drivers),
+ sprintf('PDO should have some drivers installed (currently available: %s)', count($drivers) ? implode(', ', $drivers) : 'none'),
+ 'Install PDO drivers (mandatory for Doctrine).'
+ );
+ }
+ }
+}
diff --git a/app/autoload.php b/app/autoload.php
new file mode 100644
index 0000000..a68e37f
--- /dev/null
+++ b/app/autoload.php
@@ -0,0 +1,16 @@
+add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
+}
+
+AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
+
+return $loader;
diff --git a/app/check.php b/app/check.php
new file mode 100644
index 0000000..daa6d0a
--- /dev/null
+++ b/app/check.php
@@ -0,0 +1,55 @@
+getPhpIniConfigPath();
+
+echo "********************************\n";
+echo "* *\n";
+echo "* Symfony requirements check *\n";
+echo "* *\n";
+echo "********************************\n\n";
+
+echo $iniPath ? sprintf("* Configuration file used by PHP: %s\n\n", $iniPath) : "* WARNING: No configuration file (php.ini) used by PHP!\n\n";
+
+echo "** ATTENTION **\n";
+echo "* The PHP CLI can use a different php.ini file\n";
+echo "* than the one used with your web server.\n";
+if ('\\' == DIRECTORY_SEPARATOR) {
+ echo "* (especially on the Windows platform)\n";
+}
+echo "* To be on the safe side, please also launch the requirements check\n";
+echo "* from your web server using the web/config.php script.\n";
+
+echo_title('Mandatory requirements');
+
+foreach ($symfonyRequirements->getRequirements() as $req) {
+ echo_requirement($req);
+}
+
+echo_title('Optional recommendations');
+
+foreach ($symfonyRequirements->getRecommendations() as $req) {
+ echo_requirement($req);
+}
+
+/**
+ * Prints a Requirement instance
+ */
+function echo_requirement(Requirement $requirement)
+{
+ $result = $requirement->isFulfilled() ? 'OK' : ($requirement->isOptional() ? 'WARNING' : 'ERROR');
+ echo ' ' . str_pad($result, 9);
+ echo $requirement->getTestMessage() . "\n";
+
+ if (!$requirement->isFulfilled()) {
+ echo sprintf(" %s\n\n", $requirement->getHelpText());
+ }
+}
+
+function echo_title($title)
+{
+ echo "\n** $title **\n\n";
+}
diff --git a/app/config/config.yml b/app/config/config.yml
new file mode 100644
index 0000000..6859cea
--- /dev/null
+++ b/app/config/config.yml
@@ -0,0 +1,59 @@
+imports:
+ - { resource: parameters.yml }
+ - { resource: security.yml }
+
+framework:
+ #esi: ~
+ #translator: { fallback: "%locale%" }
+ secret: "%secret%"
+ router:
+ resource: "%kernel.root_dir%/config/routing.yml"
+ strict_requirements: "%kernel.debug%"
+ form: true
+ csrf_protection: true
+ validation: { enable_annotations: true }
+ templating: { engines: ['twig'] } #assets_version: SomeVersionScheme
+ default_locale: "%locale%"
+ trust_proxy_headers: false # Whether or not the Request object should trust proxy headers (X_FORWARDED_FOR/HTTP_CLIENT_IP)
+ session: ~
+
+# Twig Configuration
+twig:
+ debug: "%kernel.debug%"
+ strict_variables: "%kernel.debug%"
+
+# Assetic Configuration
+assetic:
+ debug: "%kernel.debug%"
+ use_controller: false
+ bundles: [ ]
+ #java: /usr/bin/java
+ filters:
+ cssrewrite: ~
+ #closure:
+ # jar: "%kernel.root_dir%/Resources/java/compiler.jar"
+ #yui_css:
+ # jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
+
+# Doctrine Configuration
+doctrine:
+ dbal:
+ driver: "%database_driver%"
+ host: "%database_host%"
+ port: "%database_port%"
+ dbname: "%database_name%"
+ user: "%database_user%"
+ password: "%database_password%"
+ charset: UTF8
+
+ orm:
+ auto_generate_proxy_classes: "%kernel.debug%"
+ auto_mapping: true
+
+# Swiftmailer Configuration
+swiftmailer:
+ transport: "%mailer_transport%"
+ host: "%mailer_host%"
+ username: "%mailer_user%"
+ password: "%mailer_password%"
+ spool: { type: memory }
diff --git a/app/config/config_dev.yml b/app/config/config_dev.yml
new file mode 100644
index 0000000..8dbf07b
--- /dev/null
+++ b/app/config/config_dev.yml
@@ -0,0 +1,26 @@
+imports:
+ - { resource: config.yml }
+
+framework:
+ router: { resource: "%kernel.root_dir%/config/routing_dev.yml" }
+ profiler: { only_exceptions: false }
+
+web_profiler:
+ toolbar: true
+ intercept_redirects: false
+
+monolog:
+ handlers:
+ main:
+ type: stream
+ path: "%kernel.logs_dir%/%kernel.environment%.log"
+ level: debug
+ firephp:
+ type: firephp
+ level: info
+
+assetic:
+ use_controller: true
+
+#swiftmailer:
+# delivery_address: me@example.com
diff --git a/app/config/config_prod.yml b/app/config/config_prod.yml
new file mode 100644
index 0000000..332a137
--- /dev/null
+++ b/app/config/config_prod.yml
@@ -0,0 +1,19 @@
+imports:
+ - { resource: config.yml }
+
+#doctrine:
+# orm:
+# metadata_cache_driver: apc
+# result_cache_driver: apc
+# query_cache_driver: apc
+
+monolog:
+ handlers:
+ main:
+ type: fingers_crossed
+ action_level: error
+ handler: nested
+ nested:
+ type: stream
+ path: "%kernel.logs_dir%/%kernel.environment%.log"
+ level: debug
diff --git a/app/config/config_test.yml b/app/config/config_test.yml
new file mode 100644
index 0000000..e7f44e5
--- /dev/null
+++ b/app/config/config_test.yml
@@ -0,0 +1,14 @@
+imports:
+ - { resource: config_dev.yml }
+
+framework:
+ test: ~
+ session:
+ storage_id: session.storage.mock_file
+
+web_profiler:
+ toolbar: false
+ intercept_redirects: false
+
+swiftmailer:
+ disable_delivery: true
diff --git a/app/config/parameters.yml b/app/config/parameters.yml
new file mode 100644
index 0000000..6f0c6ee
--- /dev/null
+++ b/app/config/parameters.yml
@@ -0,0 +1,15 @@
+parameters:
+ database_driver: pdo_mysql
+ database_host: localhost
+ database_port: ~
+ database_name: symfony
+ database_user: root
+ database_password: ~
+
+ mailer_transport: smtp
+ mailer_host: localhost
+ mailer_user: ~
+ mailer_password: ~
+
+ locale: en
+ secret: ThisTokenIsNotSoSecretChangeIt
diff --git a/app/config/routing.yml b/app/config/routing.yml
new file mode 100644
index 0000000..684d364
--- /dev/null
+++ b/app/config/routing.yml
@@ -0,0 +1,4 @@
+# Internal routing configuration to handle ESI
+#_internal:
+# resource: "@FrameworkBundle/Resources/config/routing/internal.xml"
+# prefix: /_internal
diff --git a/app/config/routing_dev.yml b/app/config/routing_dev.yml
new file mode 100644
index 0000000..22a48ae
--- /dev/null
+++ b/app/config/routing_dev.yml
@@ -0,0 +1,27 @@
+_welcome:
+ pattern: /
+ defaults: { _controller: AcmeDemoBundle:Welcome:index }
+
+_demo_secured:
+ resource: "@AcmeDemoBundle/Controller/SecuredController.php"
+ type: annotation
+
+_demo:
+ resource: "@AcmeDemoBundle/Controller/DemoController.php"
+ type: annotation
+ prefix: /demo
+
+_wdt:
+ resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
+ prefix: /_wdt
+
+_profiler:
+ resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
+ prefix: /_profiler
+
+_configurator:
+ resource: "@SensioDistributionBundle/Resources/config/routing/webconfigurator.xml"
+ prefix: /_configurator
+
+_main:
+ resource: routing.yml
diff --git a/app/config/security.yml b/app/config/security.yml
new file mode 100644
index 0000000..e01c1c2
--- /dev/null
+++ b/app/config/security.yml
@@ -0,0 +1,43 @@
+jms_security_extra:
+ secure_all_services: false
+ expressions: true
+
+security:
+ encoders:
+ Symfony\Component\Security\Core\User\User: plaintext
+
+ role_hierarchy:
+ ROLE_ADMIN: ROLE_USER
+ ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
+
+ providers:
+ in_memory:
+ memory:
+ users:
+ user: { password: userpass, roles: [ 'ROLE_USER' ] }
+ admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
+
+ firewalls:
+ dev:
+ pattern: ^/(_(profiler|wdt)|css|images|js)/
+ security: false
+
+ login:
+ pattern: ^/demo/secured/login$
+ security: false
+
+ secured_area:
+ pattern: ^/demo/secured/
+ form_login:
+ check_path: /demo/secured/login_check
+ login_path: /demo/secured/login
+ logout:
+ path: /demo/secured/logout
+ target: /demo/
+ #anonymous: ~
+ #http_basic:
+ # realm: "Secured Demo Area"
+
+ access_control:
+ #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
+ #- { path: ^/_internal/secure, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
diff --git a/app/console b/app/console
new file mode 100644
index 0000000..1de6db4
--- /dev/null
+++ b/app/console
@@ -0,0 +1,22 @@
+#!/usr/bin/env php
+getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');
+$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(array('--no-debug', '')) && $env !== 'prod';
+
+$kernel = new AppKernel($env, $debug);
+$application = new Application($kernel);
+$application->run($input);
diff --git a/app/phpunit.xml.dist b/app/phpunit.xml.dist
new file mode 100644
index 0000000..1e31086
--- /dev/null
+++ b/app/phpunit.xml.dist
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+ ../src/*/*Bundle/Tests
+ ../src/*/Bundle/*Bundle/Tests
+
+
+
+
+
+
+
+ ../src
+
+ ../src/*/*Bundle/Resources
+ ../src/*/*Bundle/Tests
+ ../src/*/Bundle/*Bundle/Resources
+ ../src/*/Bundle/*Bundle/Tests
+
+
+
+
+
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..fd1aa0e
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,41 @@
+{
+ "name": "symfony/framework-standard-edition",
+ "description": "The \"Symfony Standard Edition\" distribution",
+ "autoload": {
+ "psr-0": { "": "src/" }
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "symfony/symfony": "2.1.*",
+ "doctrine/orm": ">=2.2.3,<2.4-dev",
+ "doctrine/doctrine-bundle": "1.0.*",
+ "twig/extensions": "1.0.*",
+ "symfony/assetic-bundle": "2.1.*",
+ "symfony/swiftmailer-bundle": "2.1.*",
+ "symfony/monolog-bundle": "2.1.*",
+ "sensio/distribution-bundle": "2.1.*",
+ "sensio/framework-extra-bundle": "2.1.*",
+ "sensio/generator-bundle": "2.1.*",
+ "jms/security-extra-bundle": "1.2.*",
+ "jms/di-extra-bundle": "1.1.*"
+ },
+ "scripts": {
+ "post-install-cmd": [
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
+ ],
+ "post-update-cmd": [
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
+ ]
+ },
+ "minimum-stability": "dev",
+ "extra": {
+ "symfony-app-dir": "app",
+ "symfony-web-dir": "web"
+ }
+}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..458219f
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,1213 @@
+{
+ "hash": "871ca732d39c832f0b78012cc83cec2e",
+ "packages": [
+ {
+ "name": "doctrine/common",
+ "version": "2.3.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/common",
+ "reference": "bb0aebbf234db52df476a2b473d434745b34221c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/doctrine/common/zipball/bb0aebbf234db52df476a2b473d434745b34221c",
+ "reference": "bb0aebbf234db52df476a2b473d434745b34221c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "time": "1348120518",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\Common": "lib/"
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com",
+ "homepage": "http://www.jwage.com/"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "http://jmsyst.com",
+ "role": "Developer of wrapped JMSSerializerBundle"
+ }
+ ],
+ "description": "Common Library for Doctrine projects",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "collections",
+ "spl",
+ "eventmanager",
+ "annotations",
+ "persistence"
+ ]
+ },
+ {
+ "name": "doctrine/dbal",
+ "version": "2.3.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/dbal",
+ "reference": "9395ca33971c0ff875d71a0271e6c0d5b0f01508"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/doctrine/dbal/zipball/9395ca33971c0ff875d71a0271e6c0d5b0f01508",
+ "reference": "9395ca33971c0ff875d71a0271e6c0d5b0f01508",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2",
+ "doctrine/common": "2.3.*"
+ },
+ "time": "1350419590",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\DBAL": "lib/"
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com",
+ "homepage": "http://www.jwage.com/"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com",
+ "homepage": "http://www.instaclick.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ }
+ ],
+ "description": "Database Abstraction Layer",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "database",
+ "persistence",
+ "dbal",
+ "queryobject"
+ ]
+ },
+ {
+ "name": "doctrine/doctrine-bundle",
+ "version": "dev-master",
+ "target-dir": "Doctrine/Bundle/DoctrineBundle",
+ "source": {
+ "type": "git",
+ "url": "git://github.com/doctrine/DoctrineBundle.git",
+ "reference": "a3b99ec049b7c488c70b8776a67c594e6ddf54cd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/doctrine/DoctrineBundle/zipball/a3b99ec049b7c488c70b8776a67c594e6ddf54cd",
+ "reference": "a3b99ec049b7c488c70b8776a67c594e6ddf54cd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2",
+ "doctrine/dbal": ">=2.2,<2.4-dev",
+ "symfony/framework-bundle": ">=2.1,<2.3-dev",
+ "symfony/doctrine-bridge": ">=2.1,<2.3-dev"
+ },
+ "require-dev": {
+ "doctrine/orm": ">=2.2,<2.4-dev",
+ "symfony/yaml": ">=2.1,<2.3-dev",
+ "symfony/validator": ">=2.1,<2.3-dev"
+ },
+ "suggest": {
+ "doctrine/orm": "The Doctrine ORM integration is optional in the bundle."
+ },
+ "time": "1350120716",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\Bundle\\DoctrineBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ }
+ ],
+ "description": "Symfony DoctrineBundle",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "database",
+ "orm",
+ "persistence",
+ "dbal"
+ ]
+ },
+ {
+ "name": "doctrine/orm",
+ "version": "2.3.x-dev",
+ "source": {
+ "type": "git",
+ "url": "git://github.com/doctrine/doctrine2.git",
+ "reference": "6bad0109599348c5216df35f62b80a20ba16c507"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/doctrine/doctrine2/zipball/6bad0109599348c5216df35f62b80a20ba16c507",
+ "reference": "6bad0109599348c5216df35f62b80a20ba16c507",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2",
+ "ext-pdo": "*",
+ "symfony/console": "2.*",
+ "doctrine/dbal": "2.3.*"
+ },
+ "suggest": {
+ "symfony/yaml": "If you want to use YAML Metadata Mapping Driver"
+ },
+ "time": "1350071385",
+ "bin": [
+ "bin/doctrine",
+ "bin/doctrine.php"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\ORM": "lib/"
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com",
+ "homepage": "http://www.jwage.com/"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com",
+ "homepage": "http://www.instaclick.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ }
+ ],
+ "description": "Object-Relational-Mapper for PHP",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "database",
+ "orm"
+ ]
+ },
+ {
+ "name": "jms/aop-bundle",
+ "version": "1.0.0",
+ "target-dir": "JMS/AopBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/JMSAopBundle",
+ "reference": "1.0.0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/schmittjoh/JMSAopBundle/zipball/1.0.0",
+ "reference": "1.0.0",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/framework-bundle": "2.*",
+ "jms/cg": "1.0.0"
+ },
+ "time": "2012-01-02 12:50:26",
+ "type": "symfony-bundle",
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "JMS\\AopBundle": ""
+ }
+ },
+ "license": [
+ "Apache"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "http://jmsyst.com",
+ "role": "Developer of wrapped JMSSerializerBundle"
+ }
+ ],
+ "description": "Adds AOP capabilities to Symfony2",
+ "keywords": [
+ "annotations",
+ "aop"
+ ]
+ },
+ {
+ "name": "jms/cg",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "git://github.com/schmittjoh/cg-library.git",
+ "reference": "1.0.0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/schmittjoh/cg-library/zipball/1.0.0",
+ "reference": "1.0.0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "time": "2012-01-02 20:40:52",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "CG\\": "src/"
+ }
+ },
+ "license": [
+ "Apache"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "http://jmsyst.com",
+ "role": "Developer of wrapped JMSSerializerBundle"
+ }
+ ],
+ "description": "Toolset for generating PHP code",
+ "keywords": [
+ "code generation"
+ ]
+ },
+ {
+ "name": "jms/di-extra-bundle",
+ "version": "1.1.x-dev",
+ "target-dir": "JMS/DiExtraBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/JMSDiExtraBundle",
+ "reference": "1.1.1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/schmittjoh/JMSDiExtraBundle/zipball/1.1.1",
+ "reference": "1.1.1",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/framework-bundle": "2.1.*",
+ "jms/aop-bundle": "1.0.*",
+ "jms/metadata": "1.1.*",
+ "symfony/process": "2.1.*",
+ "symfony/finder": "2.1.*"
+ },
+ "require-dev": {
+ "jms/security-extra-bundle": "1.*",
+ "symfony/validator": "*",
+ "symfony/form": "*",
+ "symfony/class-loader": "*",
+ "symfony/yaml": "*",
+ "symfony/browser-kit": "*",
+ "symfony/security-bundle": "*",
+ "symfony/twig-bundle": "*",
+ "sensio/framework-extra-bundle": "*",
+ "doctrine/doctrine-bundle": "*",
+ "doctrine/orm": "*"
+ },
+ "time": "1348217792",
+ "type": "symfony-bundle",
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "JMS\\DiExtraBundle": ""
+ }
+ },
+ "license": [
+ "Apache"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "http://jmsyst.com",
+ "role": "Developer of wrapped JMSSerializerBundle"
+ }
+ ],
+ "description": "Allows to configure dependency injection using annotations",
+ "homepage": "http://jmsyst.com/bundles/JMSDiExtraBundle",
+ "keywords": [
+ "dependency injection",
+ "annotations"
+ ]
+ },
+ {
+ "name": "jms/metadata",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/metadata",
+ "reference": "1.1.1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/schmittjoh/metadata/zipball/1.1.1",
+ "reference": "1.1.1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "time": "2012-01-02 21:32:49",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "Metadata\\": "src/"
+ }
+ },
+ "license": [
+ "Apache"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "http://jmsyst.com",
+ "role": "Developer of wrapped JMSSerializerBundle"
+ }
+ ],
+ "description": "Class/method/property metadata management in PHP",
+ "keywords": [
+ "annotations",
+ "yaml",
+ "xml",
+ "metadata"
+ ]
+ },
+ {
+ "name": "jms/security-extra-bundle",
+ "version": "1.2.x-dev",
+ "target-dir": "JMS/SecurityExtraBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/JMSSecurityExtraBundle",
+ "reference": "9ab6aceda50fc7a2b07d741ba4b3f0695508afcb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/schmittjoh/JMSSecurityExtraBundle/zipball/9ab6aceda50fc7a2b07d741ba4b3f0695508afcb",
+ "reference": "9ab6aceda50fc7a2b07d741ba4b3f0695508afcb",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/framework-bundle": "2.1.*",
+ "symfony/security-bundle": "*",
+ "jms/metadata": "1.1.*",
+ "jms/aop-bundle": "1.0.*",
+ "jms/di-extra-bundle": "1.1.*"
+ },
+ "require-dev": {
+ "sensio/framework-extra-bundle": "*",
+ "symfony/class-loader": "*",
+ "symfony/yaml": "*",
+ "symfony/browser-kit": "*",
+ "symfony/finder": "*",
+ "symfony/css-selector": "*",
+ "symfony/process": "*",
+ "doctrine/doctrine-bundle": "*",
+ "symfony/twig-bundle": "*",
+ "doctrine/orm": "*",
+ "symfony/form": "*",
+ "symfony/validator": "*"
+ },
+ "time": "1346947943",
+ "type": "symfony-bundle",
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "JMS\\SecurityExtraBundle": ""
+ }
+ },
+ "license": [
+ "Apache2"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "http://jmsyst.com",
+ "role": "Developer of wrapped JMSSerializerBundle"
+ }
+ ],
+ "description": "Enhances the Symfony2 Security Component by adding several new features",
+ "homepage": "http://jmsyst.com/bundles/JMSSecurityExtraBundle",
+ "keywords": [
+ "annotations",
+ "authorization",
+ "security",
+ "secure",
+ "expression"
+ ]
+ },
+ {
+ "name": "kriswallsmith/assetic",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "http://github.com/kriswallsmith/assetic.git",
+ "reference": "a1b6fa1f7bb27c203b6c3cf7d0dd0184f8dffcdc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/kriswallsmith/assetic/zipball/a1b6fa1f7bb27c203b6c3cf7d0dd0184f8dffcdc",
+ "reference": "a1b6fa1f7bb27c203b6c3cf7d0dd0184f8dffcdc",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/process": ">=2.1.0,<2.3-dev",
+ "php": ">=5.3.1"
+ },
+ "require-dev": {
+ "twig/twig": ">=1.6.0,<2.0",
+ "leafo/lessphp": "*",
+ "leafo/scssphp": "*",
+ "ptachoire/cssembed": "*",
+ "leafo/scssphp-compass": "*"
+ },
+ "suggest": {
+ "twig/twig": "Assetic provides the integration with the Twig templating engine",
+ "leafo/lessphp": "Assetic provides the integration with the lessphp LESS compiler",
+ "leafo/scssphp": "Assetic provides the integration with the scssphp SCSS compiler",
+ "ptachoire/cssembed": "Assetic provides the integration with phpcssembed to embed data uris",
+ "leafo/scssphp-compass": "Assetic provides the integration with the SCSS compass plugin"
+ },
+ "time": "1351079542",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Assetic": "src/"
+ },
+ "files": [
+ "src/functions.php"
+ ]
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kris Wallsmith",
+ "email": "kris.wallsmith@gmail.com",
+ "homepage": "http://kriswallsmith.net/"
+ }
+ ],
+ "description": "Asset Management for PHP",
+ "homepage": "https://github.com/kriswallsmith/assetic",
+ "keywords": [
+ "assets",
+ "compression",
+ "minification"
+ ]
+ },
+ {
+ "name": "monolog/monolog",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/monolog",
+ "reference": "38bb472abb27db138536f845f7d259c1c47bbd3f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/Seldaek/monolog/zipball/38bb472abb27db138536f845f7d259c1c47bbd3f",
+ "reference": "38bb472abb27db138536f845f7d259c1c47bbd3f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "mlehner/gelf-php": "1.0.*"
+ },
+ "suggest": {
+ "mlehner/gelf-php": "Allow sending log messages to a GrayLog2 server",
+ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+ "ext-mongo": "Allow sending log messages to a MongoDB server"
+ },
+ "time": "1351084926",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Monolog": "src/"
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "Logging for PHP 5.3",
+ "homepage": "http://github.com/Seldaek/monolog",
+ "keywords": [
+ "log",
+ "logging"
+ ]
+ },
+ {
+ "name": "sensio/distribution-bundle",
+ "version": "2.1.x-dev",
+ "target-dir": "Sensio/Bundle/DistributionBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sensio/SensioDistributionBundle",
+ "reference": "v2.1.3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/sensio/SensioDistributionBundle/zipball/v2.1.3",
+ "reference": "v2.1.3",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/framework-bundle": "2.1.*"
+ },
+ "time": "1347340208",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Sensio\\Bundle\\DistributionBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "The base bundle for the Symfony Distributions",
+ "keywords": [
+ "distribution",
+ "configuration"
+ ]
+ },
+ {
+ "name": "sensio/framework-extra-bundle",
+ "version": "2.1.x-dev",
+ "target-dir": "Sensio/Bundle/FrameworkExtraBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sensio/SensioFrameworkExtraBundle",
+ "reference": "v2.1.3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/sensio/SensioFrameworkExtraBundle/zipball/v2.1.3",
+ "reference": "v2.1.3",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/framework-bundle": "2.1.*",
+ "doctrine/common": ">=2.1,<2.4-dev"
+ },
+ "time": "1350448707",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Sensio\\Bundle\\FrameworkExtraBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "This bundle provides a way to configure your controllers with annotations",
+ "keywords": [
+ "annotations",
+ "controllers"
+ ]
+ },
+ {
+ "name": "sensio/generator-bundle",
+ "version": "2.1.x-dev",
+ "target-dir": "Sensio/Bundle/GeneratorBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sensio/SensioGeneratorBundle",
+ "reference": "v2.1.3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/sensio/SensioGeneratorBundle/zipball/v2.1.3",
+ "reference": "v2.1.3",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/framework-bundle": "2.1.*",
+ "symfony/console": "2.1.*"
+ },
+ "require-dev": {
+ "symfony/doctrine-bridge": "2.1.*",
+ "doctrine/orm": ">=2.1,<2.4-dev",
+ "twig/twig": ">=1.8,<2.0-dev"
+ },
+ "time": "1348030981",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Sensio\\Bundle\\GeneratorBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "This bundle generates code for you"
+ },
+ {
+ "name": "swiftmailer/swiftmailer",
+ "version": "v4.2.2",
+ "source": {
+ "type": "git",
+ "url": "git://github.com/swiftmailer/swiftmailer.git",
+ "reference": "v4.2.2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/swiftmailer/swiftmailer/zipball/v4.2.2",
+ "reference": "v4.2.2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.4"
+ },
+ "time": "2012-10-25 01:30:40",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.2-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "files": [
+ "lib/swift_required.php"
+ ]
+ },
+ "license": [
+ "LGPL"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Chris Corbyn"
+ }
+ ],
+ "description": "Swiftmailer, free feature-rich PHP mailer",
+ "homepage": "http://swiftmailer.org",
+ "keywords": [
+ "mail",
+ "mailer"
+ ]
+ },
+ {
+ "name": "symfony/assetic-bundle",
+ "version": "dev-master",
+ "target-dir": "Symfony/Bundle/AsseticBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/AsseticBundle",
+ "reference": "4eea8571954132e4715a5e756fe6a90a7e2d90f6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/symfony/AsseticBundle/zipball/4eea8571954132e4715a5e756fe6a90a7e2d90f6",
+ "reference": "4eea8571954132e4715a5e756fe6a90a7e2d90f6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "kriswallsmith/assetic": "1.1.*",
+ "symfony/framework-bundle": ">=2.1.0,<2.3-dev"
+ },
+ "require-dev": {
+ "symfony/twig-bundle": ">=2.1.0,<2.3-dev",
+ "symfony/console": ">=2.1.0,<2.3-dev",
+ "symfony/class-loader": ">=2.1.0,<2.3-dev",
+ "symfony/yaml": ">=2.1.0,<2.3-dev",
+ "symfony/form": ">=2.1.0,<2.3-dev",
+ "symfony/dom-crawler": ">=2.1.0,<2.3-dev",
+ "symfony/css-selector": ">=2.1.0,<2.3-dev"
+ },
+ "suggest": {
+ "symfony/twig-bundle": ">=2.1.0,<2.3-dev"
+ },
+ "time": "1350864366",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Bundle\\AsseticBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kris Wallsmith",
+ "email": "kris.wallsmith@gmail.com",
+ "homepage": "http://kriswallsmith.net/"
+ }
+ ],
+ "description": "Integrates Assetic into Symfony2",
+ "homepage": "https://github.com/symfony/AsseticBundle",
+ "keywords": [
+ "assets",
+ "compression",
+ "minification"
+ ]
+ },
+ {
+ "name": "symfony/monolog-bundle",
+ "version": "dev-master",
+ "target-dir": "Symfony/Bundle/MonologBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/MonologBundle",
+ "reference": "51517152a608926ee6b40ed8cfbba1a708f0a14f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/symfony/MonologBundle/zipball/51517152a608926ee6b40ed8cfbba1a708f0a14f",
+ "reference": "51517152a608926ee6b40ed8cfbba1a708f0a14f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2",
+ "monolog/monolog": "1.*",
+ "symfony/monolog-bridge": ">=2.1.0,<2.3-dev",
+ "symfony/dependency-injection": ">=2.1.0,<2.3-dev",
+ "symfony/config": ">=2.1.0,<2.3-dev"
+ },
+ "require-dev": {
+ "symfony/yaml": ">=2.1.0,<2.3-dev",
+ "symfony/config": ">=2.1.0,<2.3-dev"
+ },
+ "time": "1348137624",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Bundle\\MonologBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony MonologBundle",
+ "homepage": "http://symfony.com"
+ },
+ {
+ "name": "symfony/swiftmailer-bundle",
+ "version": "dev-master",
+ "target-dir": "Symfony/Bundle/SwiftmailerBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/SwiftmailerBundle",
+ "reference": "2393ba6d4f1b544349123e24a16bbc749bef9e55"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/symfony/SwiftmailerBundle/zipball/2393ba6d4f1b544349123e24a16bbc749bef9e55",
+ "reference": "2393ba6d4f1b544349123e24a16bbc749bef9e55",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2",
+ "swiftmailer/swiftmailer": ">=4.2.0,<4.3-dev",
+ "symfony/swiftmailer-bridge": ">=2.1.0,<2.3-dev"
+ },
+ "require-dev": {
+ "symfony/dependency-injection": ">=2.1.0,<2.3-dev",
+ "symfony/http-kernel": ">=2.1.0,<2.3-dev",
+ "symfony/config": ">=2.1.0,<2.3-dev",
+ "symfony/yaml": ">=2.1.0,<2.3-dev"
+ },
+ "time": "1350447491",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Bundle\\SwiftmailerBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony SwiftmailerBundle",
+ "homepage": "http://symfony.com"
+ },
+ {
+ "name": "symfony/symfony",
+ "version": "2.1.x-dev",
+ "source": {
+ "type": "git",
+ "url": "git://github.com/symfony/symfony.git",
+ "reference": "v2.1.3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/symfony/symfony/zipball/v2.1.3",
+ "reference": "v2.1.3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "doctrine/common": ">2.2,<2.4-dev",
+ "twig/twig": ">=1.9.1,<2.0-dev"
+ },
+ "replace": {
+ "symfony/doctrine-bridge": "self.version",
+ "symfony/monolog-bridge": "self.version",
+ "symfony/propel1-bridge": "self.version",
+ "symfony/swiftmailer-bridge": "self.version",
+ "symfony/twig-bridge": "self.version",
+ "symfony/framework-bundle": "self.version",
+ "symfony/security-bundle": "self.version",
+ "symfony/twig-bundle": "self.version",
+ "symfony/web-profiler-bundle": "self.version",
+ "symfony/browser-kit": "self.version",
+ "symfony/class-loader": "self.version",
+ "symfony/config": "self.version",
+ "symfony/console": "self.version",
+ "symfony/css-selector": "self.version",
+ "symfony/dependency-injection": "self.version",
+ "symfony/dom-crawler": "self.version",
+ "symfony/event-dispatcher": "self.version",
+ "symfony/filesystem": "self.version",
+ "symfony/finder": "self.version",
+ "symfony/form": "self.version",
+ "symfony/http-foundation": "self.version",
+ "symfony/http-kernel": "self.version",
+ "symfony/locale": "self.version",
+ "symfony/options-resolver": "self.version",
+ "symfony/process": "self.version",
+ "symfony/routing": "self.version",
+ "symfony/security": "self.version",
+ "symfony/serializer": "self.version",
+ "symfony/templating": "self.version",
+ "symfony/translation": "self.version",
+ "symfony/validator": "self.version",
+ "symfony/yaml": "self.version"
+ },
+ "require-dev": {
+ "doctrine/dbal": ">=2.2,<2.4-dev",
+ "doctrine/orm": ">=2.2.3,<2.4-dev",
+ "doctrine/data-fixtures": "1.0.*",
+ "propel/propel1": "dev-master",
+ "monolog/monolog": "1.*"
+ },
+ "time": "1351584854",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Symfony": "src/",
+ "SessionHandlerInterface": "src/Symfony/Component/HttpFoundation/Resources/stubs"
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ }
+ ],
+ "description": "The Symfony PHP framework",
+ "homepage": "http://symfony.com",
+ "keywords": [
+ "framework"
+ ]
+ },
+ {
+ "name": "twig/extensions",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/fabpot/Twig-extensions",
+ "reference": "dcdff02fbac1282e6b8f4d0558cc7e9580105688"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/fabpot/Twig-extensions/zipball/dcdff02fbac1282e6b8f4d0558cc7e9580105688",
+ "reference": "dcdff02fbac1282e6b8f4d0558cc7e9580105688",
+ "shasum": ""
+ },
+ "require": {
+ "twig/twig": "1.*"
+ },
+ "time": "1349889206",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Twig_Extensions_": "lib/"
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Common additional features for Twig that do not directly belong in core",
+ "homepage": "https://github.com/fabpot/Twig-extensions",
+ "keywords": [
+ "debug",
+ "i18n",
+ "text"
+ ]
+ },
+ {
+ "name": "twig/twig",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "git://github.com/fabpot/Twig.git",
+ "reference": "0505c2fefd5eaa81c628b0cf8a9b8a2bc612321c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/fabpot/Twig/zipball/0505c2fefd5eaa81c628b0cf8a9b8a2bc612321c",
+ "reference": "0505c2fefd5eaa81c628b0cf8a9b8a2bc612321c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.4"
+ },
+ "time": "1351434618",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.11-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Twig_": "lib/"
+ }
+ },
+ "license": [
+ "BSD-3"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Armin Ronacher",
+ "email": "armin.ronacher@active-4.com"
+ }
+ ],
+ "description": "Twig, the flexible, fast, and secure template language for PHP",
+ "homepage": "http://twig.sensiolabs.org",
+ "keywords": [
+ "templating"
+ ]
+ }
+ ],
+ "packages-dev": [
+
+ ],
+ "aliases": [
+
+ ],
+ "minimum-stability": "dev",
+ "stability-flags": [
+
+ ]
+}
diff --git a/src/.htaccess b/src/.htaccess
new file mode 100644
index 0000000..3418e55
--- /dev/null
+++ b/src/.htaccess
@@ -0,0 +1 @@
+deny from all
\ No newline at end of file
diff --git a/src/Acme/DemoBundle/AcmeDemoBundle.php b/src/Acme/DemoBundle/AcmeDemoBundle.php
new file mode 100644
index 0000000..269fc1e
--- /dev/null
+++ b/src/Acme/DemoBundle/AcmeDemoBundle.php
@@ -0,0 +1,9 @@
+ $name);
+ }
+
+ /**
+ * @Route("/contact", name="_demo_contact")
+ * @Template()
+ */
+ public function contactAction()
+ {
+ $form = $this->get('form.factory')->create(new ContactType());
+
+ $request = $this->get('request');
+ if ('POST' == $request->getMethod()) {
+ $form->bindRequest($request);
+ if ($form->isValid()) {
+ $mailer = $this->get('mailer');
+ // .. setup a message and send it
+ // http://symfony.com/doc/current/cookbook/email.html
+
+ $this->get('session')->setFlash('notice', 'Message sent!');
+
+ return new RedirectResponse($this->generateUrl('_demo'));
+ }
+ }
+
+ return array('form' => $form->createView());
+ }
+}
diff --git a/src/Acme/DemoBundle/Controller/SecuredController.php b/src/Acme/DemoBundle/Controller/SecuredController.php
new file mode 100644
index 0000000..9848e42
--- /dev/null
+++ b/src/Acme/DemoBundle/Controller/SecuredController.php
@@ -0,0 +1,69 @@
+get('request')->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
+ $error = $this->get('request')->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
+ } else {
+ $error = $this->get('request')->getSession()->get(SecurityContext::AUTHENTICATION_ERROR);
+ }
+
+ return array(
+ 'last_username' => $this->get('request')->getSession()->get(SecurityContext::LAST_USERNAME),
+ 'error' => $error,
+ );
+ }
+
+ /**
+ * @Route("/login_check", name="_security_check")
+ */
+ public function securityCheckAction()
+ {
+ // The security layer will intercept this request
+ }
+
+ /**
+ * @Route("/logout", name="_demo_logout")
+ */
+ public function logoutAction()
+ {
+ // The security layer will intercept this request
+ }
+
+ /**
+ * @Route("/hello", defaults={"name"="World"}),
+ * @Route("/hello/{name}", name="_demo_secured_hello")
+ * @Template()
+ */
+ public function helloAction($name)
+ {
+ return array('name' => $name);
+ }
+
+ /**
+ * @Route("/hello/admin/{name}", name="_demo_secured_hello_admin")
+ * @Secure(roles="ROLE_ADMIN")
+ * @Template()
+ */
+ public function helloadminAction($name)
+ {
+ return array('name' => $name);
+ }
+}
diff --git a/src/Acme/DemoBundle/Controller/WelcomeController.php b/src/Acme/DemoBundle/Controller/WelcomeController.php
new file mode 100644
index 0000000..acceedf
--- /dev/null
+++ b/src/Acme/DemoBundle/Controller/WelcomeController.php
@@ -0,0 +1,18 @@
+render('AcmeDemoBundle:Welcome:index.html.twig');
+ }
+}
diff --git a/src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php b/src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php
new file mode 100644
index 0000000..6dfcc82
--- /dev/null
+++ b/src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php
@@ -0,0 +1,22 @@
+load('services.xml');
+ }
+
+ public function getAlias()
+ {
+ return 'acme_demo';
+ }
+}
diff --git a/src/Acme/DemoBundle/EventListener/ControllerListener.php b/src/Acme/DemoBundle/EventListener/ControllerListener.php
new file mode 100644
index 0000000..5274f71
--- /dev/null
+++ b/src/Acme/DemoBundle/EventListener/ControllerListener.php
@@ -0,0 +1,25 @@
+extension = $extension;
+ }
+
+ public function onKernelController(FilterControllerEvent $event)
+ {
+ if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
+ $this->extension->setController($event->getController());
+ }
+ }
+}
diff --git a/src/Acme/DemoBundle/Form/ContactType.php b/src/Acme/DemoBundle/Form/ContactType.php
new file mode 100644
index 0000000..2c76cdb
--- /dev/null
+++ b/src/Acme/DemoBundle/Form/ContactType.php
@@ -0,0 +1,20 @@
+add('email', 'email');
+ $builder->add('message', 'textarea');
+ }
+
+ public function getName()
+ {
+ return 'contact';
+ }
+}
diff --git a/src/Acme/DemoBundle/Resources/config/services.xml b/src/Acme/DemoBundle/Resources/config/services.xml
new file mode 100644
index 0000000..d6274ce
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/config/services.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Acme/DemoBundle/Resources/public/css/demo.css b/src/Acme/DemoBundle/Resources/public/css/demo.css
new file mode 100644
index 0000000..0a9d8e2
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/public/css/demo.css
@@ -0,0 +1,294 @@
+/*
+Copyright (c) 2010, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 2.8.2r1
+
+Reset
+*/
+
+html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var,optgroup{font-style:inherit;font-weight:inherit;}del,ins{text-decoration:none;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:baseline;}sub{vertical-align:baseline;}legend{color:#000;}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;}input,button,textarea,select{*font-size:100%;}
+
+html, body
+{
+ background-color: #EFEFEF;
+}
+
+body
+{
+ font-size: 14px;
+ font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+ color: #313131;
+}
+
+a
+{
+ color: #08C;
+ text-decoration: none;
+}
+
+a:hover
+{
+ text-decoration: underline;
+}
+
+strong
+{
+ font-weight: bold;
+}
+
+em
+{
+ font-style: italic;
+}
+
+h1, h2, h3
+{
+ font-family: Georgia, "Times New Roman", Times, serif;
+ color: #404040;
+}
+
+h1
+{
+ font-size: 45px;
+ padding-bottom: 30px;
+}
+
+h2
+{
+ font-weight: bold;
+ color: #FFFFFF;
+ /* Font is duplicated of body (sans-serif) */
+ font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+
+ margin-bottom: 10px;
+ background-color: #aacd4e;
+ padding: 2px 4px;
+ display: inline-block;
+ text-transform: uppercase;
+
+}
+
+p
+{
+ line-height: 20px;
+ padding-bottom: 20px;
+}
+
+ul#demo-list a
+{
+ background: url(../images/blue-arrow.png) no-repeat right 6px;
+ padding-right: 10px;
+ margin-right: 30px;
+}
+
+ul, ol
+{
+ padding-left: 20px;
+}
+
+li
+{
+ padding-bottom: 18px;
+}
+
+ol li
+{
+ list-style-type: decimal;
+}
+
+ul li
+{
+ list-style-type: none;
+}
+
+#symfony-header
+{
+ position: relative;
+ padding: 30px 30px 20px 30px;
+}
+
+#symfony-wrapper
+{
+ width: 970px;
+ margin: 0 auto;
+}
+
+.symfony-content
+{
+ background-color: white;
+ border: 1px solid #DFDFDF;
+ padding: 50px;
+ -moz-border-radius: 16px;
+ -webkit-border-radius: 16px;
+ border-radius: 16px;
+ margin-bottom: 20px;
+ word-wrap: break-word;
+}
+
+#symfony-search
+{
+ position: absolute;
+ top: 50px;
+ right: 30px;
+}
+
+#symfony-search input[type="search"]
+{
+ -webkit-appearance: textfield;
+}
+
+#symfony-search-field
+{
+ width: 190px;
+}
+
+#symfony-search label
+{
+ display: block;
+ float: left;
+ width: 20px;
+ height: 25px;
+ background: url(../images/search.png) no-repeat left 5px;
+}
+
+#symfony-search label span
+{
+ display: none;
+}
+
+input[type=text], input[type=password]
+{
+ border: 1px solid #DADADA;
+ background: white url(../images/field-background.gif) repeat-x left top;
+ padding: 5px 6px;
+ color: #565656;
+ font-family: 'Lucida Sans Unicode', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif;
+ font-size: 12px;
+}
+
+.symfony-button-grey,
+.symfony-button-green
+{
+ font-size: 0.85em;
+ font-weight: bold;
+
+ cursor: pointer;
+
+ display: inline-block;
+ outline: none;
+
+ text-align: center;
+ text-transform: uppercase;
+
+ padding: 3px 10px;
+
+ text-shadow: 0 1px 1px rgba(0,0,0,.3);
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.symfony-button-grey
+{
+ color: #868686;
+ font-weight: normal;
+
+ padding: 5px 10px;
+ border: solid 1px #d7d7d7;
+ background: #ffffff;
+ background: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#d7d7d7));
+ background: -moz-linear-gradient(top, #ffffff, #d7d7d7);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#d7d7d7');
+}
+
+.symfony-button-green
+{
+ padding: 5px 12px;
+
+ color: white;
+
+ border: solid 1px #a7da39;
+ background: #a7da39;
+ background: -webkit-gradient(linear, left top, left bottom, from(#a7da39), to(#6a9211));
+ background: -moz-linear-gradient(top, #a7da39, #6a9211);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#a7da39', endColorstr='#6a9211');
+}
+
+.symfony-blocks-welcome
+{
+ overflow: hidden;
+}
+
+.symfony-blocks-welcome > div
+{
+ background-color: whitesmoke;
+ float: left;
+ width: 240px;
+ margin-right: 14px;
+ text-align: center;
+ padding: 26px 20px;
+}
+
+.symfony-blocks-welcome > div.block-demo
+{
+ margin-right: 0;
+}
+
+.symfony-blocks-welcome .illustration
+{
+ padding-bottom: 20px;
+}
+
+.symfony-blocks-help
+{
+ overflow: hidden;
+}
+
+.symfony-blocks-help
+{
+ margin-top: 30px;
+ padding: 18px;
+ border: 1px solid #E6E6E6;
+}
+
+.symfony-blocks-help > div
+{
+ width: 254px;
+ float: left;
+}
+
+.flash-message
+{
+ padding: 10px;
+ margin: 5px;
+ margin-top: 15px;
+ background-color: #ffe;
+}
+
+.error
+{
+ color: red;
+}
+
+#login label, #contact_form label
+{
+ display: block;
+ float: left;
+ width: 90px;
+}
+
+ul#menu
+{
+ float: right;
+ margin-bottom: 20px;
+ padding-left: 0;
+}
+
+#menu li
+{
+ padding-left: 0;
+ margin-right: 10px;
+ display: inline;
+}
diff --git a/src/Acme/DemoBundle/Resources/public/images/blue-arrow.png b/src/Acme/DemoBundle/Resources/public/images/blue-arrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa82d4b4fff6414062efb2a02049cfeb9e8e7cb1
GIT binary patch
literal 181
zcmeAS@N?(olHy`uVBq!ia0vp^tU%1c!3HD^Kbl$tDajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9Md6+I=
zhqi>4PnzMOuO)K~*(RkoSoCn7)R^#~T4CSujwM;<0=t>E&QEnQ(&y3G(9U?$#xX^m
ckwt=G)hqGzYlDe*q4@=v9Pj!eSesj
znO9X=ad2|Jy}yf!jHIKbv9Yp#e1F*3*>P`jS5;V~q@}*Tzl({C|Ns9mE;9fB{{R30
z000000000000000A^8LW000^QEC2ui0JZ==06+!*peBxFX^z0-1i_MJ3+p_pEh_&5dM^QH^o`2q?YC;|Y#eo6?SBFL~IkO9*W
zUWrg(6a+6t1e9~gkzoUD0u)q?cL8IkHxMNMW_YDz4U&xn4G;-%fMrJwrreB*aD?3_
z1wa){Fo|t|jsdNTB$!ozNI7K6ROJ$p6pPVgF9`4wMB>|mt0D|wjG70m21m-KH6S4q
zhKOfKG;JyM!j7010!F!0IkQPpts|OdaKxZQty_Z;XW06P@mIDOfgM&{!i#`0fD`e3
zQEdyS&0Nj2C9?Kr8lnz-R4p>0a~KE_K`S#&yS5Dk42ZH}fWWNn-@r{EpxZBi&EUv6
z8aN0#2?2n~qoYCA9N}^4*n51eZlv`Vo}$7KN0+^P4l3M
z2>3zos9Q+@lo%19fEJ&v_eMl=Ver}i6~3L26fm|Wb=^(lB>@IXO1OprcmzanA$V+L
zb^~<*z@))9>6GxyTD2hYPk$N-mINXQ^p_PtcqCwBVHzYQp9trqhK*03$jI3zp=`EL
z4gk;<4l+DyFhEu)P)UL+z8NDzFH^jr%?TK>h?fa6iXfN(BusNv6&G%ik!z~7xy6*t
zIl-j}Y9eFPWF!!y%L|M_g5H-VU{nL2eF8edifzfKN)iT20F<12yZv3FsjK
z;Rr5efTm$DL^*<=i7qz6og;{q#A5}anraE7fn!1!py{+pbtXdbOp509;L?wY*qD(5
z06@@Q5uSu`O>_G}VTmEZ{vb*JgE&xUL1w2rpe-Fev@4h-90G~<(Y|8JzQl6785e#5UFuM(io2~!?FPxpW2UiiX#KE~*
z@e34008|A3Hij{FaHUIu9SUF;&k<9N3>-uiQxHZ4U%WA%01CV85UvN?MKf#F{QQ#6
zwS{a20W27sMHohcl(Pv9{JSJU??&s;yP0%mi5&wxi^V4(W-tK+3tD074XPv%P67Jn
zgWlPu)oR5^7&M*1$rz+WHy1@*`e+rU;lOHbgVTm}65KMKgaFOHA#`1H_0h5o&rIGb
zE)5zmMj3GkP)KY67-azeT>((?w-JLB@U8#{nAQ0qC1>EkRbD)Is|#A0lK2~y79sN}
zNG@y24sdXt_r~;iTHpx_=E*BaSP{$|$EWviZgdX{vBSluA
zfC7ZqxHo|4cW)@0O6rG$hWUwSS3w4Z5G8{2&1zKz6h<&!@COo>P*Ep(L223&B{pG-
z2y^&^Ds~qJqs^mjH~7XN@K6{!CC`PjdZDVeRKRC^iZLxrq7p~2JUof2D@uqT9E_kv
z39)c17fSdz2oVk(|*9gP26mT@rLI(4sh?6#MCjsXOoCcz2gl2{9QVN>M
zDBh=%)a0N50dPS1QV22^6&KcVi9jlXAybu*3hZqF
zu;Jn-Qqr8K6@)kfNWj!GMXb&_vW`!zqp1P`D-sM~lX-ZeEsNm?6HFs{LTHX2-e5P0
zkjo5$5s}2!XM@Adqk=r!%(|SQh-ZjzVV3BW)ka{=J|u_>4l{-2o)9YhVN4aQ+W{Xl
zVi%ZY#c|acCDCl7u_MR{1AEbx1k!1WaqiPJ^IWEzLb9vsZ1bQIlEVaoGL-Z@6r#YP
s-o}b>F^nP~2bk%~rANzE00$7X3b6#@NZAEF2Ha}_46x5i%M$_sJDrx#NB{r;
literal 0
HcmV?d00001
diff --git a/src/Acme/DemoBundle/Resources/public/images/search.png b/src/Acme/DemoBundle/Resources/public/images/search.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c88b6a4234ef5bb048bcecdc210c603c629339d
GIT binary patch
literal 737
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
EJ3feF)c^nh
literal 0
HcmV?d00001
diff --git a/src/Acme/DemoBundle/Resources/public/images/welcome-demo.gif b/src/Acme/DemoBundle/Resources/public/images/welcome-demo.gif
new file mode 100644
index 0000000000000000000000000000000000000000..0623de54c9501be250cd0907bd09f6b452c53fe6
GIT binary patch
literal 4053
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
H0RaFzT>Bsn
literal 0
HcmV?d00001
diff --git a/src/Acme/DemoBundle/Resources/public/images/welcome-quick-tour.gif b/src/Acme/DemoBundle/Resources/public/images/welcome-quick-tour.gif
new file mode 100644
index 0000000000000000000000000000000000000000..b9018b11dd21302f850984fe9b49e49828101a00
GIT binary patch
literal 4770
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%0D3*BH}7=0?8k*0Vzrykq=6t~oIX@3Ybb_LZc-J4
zwg$N=q1>88;AoNU^#wW^zIjxX2j=5zB)0%{0VpH5B_cYF)9W!jR4bq^-g@+l9tGg~
zxCCem9vp!FsDY2m^EC(ZS1sm0W>Z#*X-Vd)3^s0?L>8$nFs{u%EK*X7q&=Od>xuIt
z<>I9+h44rQi(QUaa0CMTLqc5YpX;AsqAWjo@d_n
zuf6>|CSQsG*ro&El10oy{$|ooY
zmEOc_ttc$V+%n
zUq7kyi9=ztN&Ir+1+hFPg8qTY%3Q)F5jfn7!&^XF&Q1)x&Q1ZDCnCF=!W47DCENNH4#o+7}EL=wuI@Ghl?2N@x75it~Rwx
zOb!!;;W5ZTLMmD!l`oRaP{>>ae$sXF0&xFjJB19(8}JD`F+3Xyo{v0L_&(2$c`8dn
z#}M#=>`Afi$qouu{H~7$D1muaq1#W$=7G(l3yanS9W7H%u
Pcp^k-X1orE1J?f^bf!^p
literal 0
HcmV?d00001
diff --git a/src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig b/src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig
new file mode 100644
index 0000000..e5b7523
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig
@@ -0,0 +1,15 @@
+{% extends "AcmeDemoBundle::layout.html.twig" %}
+
+{% block title "Symfony - Contact form" %}
+
+{% block content %}
+
+{% endblock %}
diff --git a/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig b/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig
new file mode 100644
index 0000000..3997ff6
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig
@@ -0,0 +1,9 @@
+{% extends "AcmeDemoBundle::layout.html.twig" %}
+
+{% block title "Hello " ~ name %}
+
+{% block content %}
+ Hello {{ name }}!
+{% endblock %}
+
+{% set code = code(_self) %}
diff --git a/src/Acme/DemoBundle/Resources/views/Demo/index.html.twig b/src/Acme/DemoBundle/Resources/views/Demo/index.html.twig
new file mode 100644
index 0000000..75f118d
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Demo/index.html.twig
@@ -0,0 +1,14 @@
+{% extends "AcmeDemoBundle::layout.html.twig" %}
+
+{% block title "Symfony - Demos" %}
+
+{% block content_header '' %}
+
+{% block content %}
+ Available demos
+
+{% endblock %}
diff --git a/src/Acme/DemoBundle/Resources/views/Secured/hello.html.twig b/src/Acme/DemoBundle/Resources/views/Secured/hello.html.twig
new file mode 100644
index 0000000..c8da283
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Secured/hello.html.twig
@@ -0,0 +1,11 @@
+{% extends "AcmeDemoBundle:Secured:layout.html.twig" %}
+
+{% block title "Hello " ~ name %}
+
+{% block content %}
+ Hello {{ name }}!
+
+ Hello resource secured for admin only.
+{% endblock %}
+
+{% set code = code(_self) %}
diff --git a/src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig b/src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig
new file mode 100644
index 0000000..425213e
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig
@@ -0,0 +1,9 @@
+{% extends "AcmeDemoBundle:Secured:layout.html.twig" %}
+
+{% block title "Hello " ~ name %}
+
+{% block content %}
+ Hello {{ name }} secured for Admins only!
+{% endblock %}
+
+{% set code = code(_self) %}
diff --git a/src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig b/src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig
new file mode 100644
index 0000000..aeea55c
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig
@@ -0,0 +1,6 @@
+{% extends "AcmeDemoBundle::layout.html.twig" %}
+
+{% block content_header_more %}
+ {{ parent() }}
+ logged in as {{ app.user ? app.user.username : 'Anonymous' }} - Logout
+{% endblock %}
diff --git a/src/Acme/DemoBundle/Resources/views/Secured/login.html.twig b/src/Acme/DemoBundle/Resources/views/Secured/login.html.twig
new file mode 100644
index 0000000..005175d
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Secured/login.html.twig
@@ -0,0 +1,29 @@
+{% extends 'AcmeDemoBundle::layout.html.twig' %}
+
+{% block content %}
+ Login
+
+
+ Choose between two default users: user/userpass (ROLE_USER) or admin/adminpass (ROLE_ADMIN)
+
+
+ {% if error %}
+ {{ error.message }}
+ {% endif %}
+
+
+{% endblock %}
+
+{% set code = code(_self) %}
diff --git a/src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig b/src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig
new file mode 100644
index 0000000..e373981
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig
@@ -0,0 +1,65 @@
+{% extends 'AcmeDemoBundle::layout.html.twig' %}
+
+{% block title %}Symfony - Welcome{% endblock %}
+
+{% block content_header '' %}
+
+{% block content %}
+ {% set version = constant('Symfony\\Component\\HttpKernel\\Kernel::MAJOR_VERSION') ~ '.' ~ constant('Symfony\\Component\\HttpKernel\\Kernel::MINOR_VERSION')%}
+
+ Welcome!
+
+ Congratulations! You have successfully installed a new Symfony application.
+
+
+
+ {% if app.environment == 'dev' %}
+
+ {% endif %}
+
+
+
+
+{% endblock %}
diff --git a/src/Acme/DemoBundle/Resources/views/layout.html.twig b/src/Acme/DemoBundle/Resources/views/layout.html.twig
new file mode 100644
index 0000000..3dd3936
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/layout.html.twig
@@ -0,0 +1,49 @@
+
+
+
+
+ {% block title %}Demo Bundle{% endblock %}
+
+
+
+
+
+
+
+ {% for flashMessage in app.session.flashbag.get('notice') %}
+
+ Notice: {{ flashMessage }}
+
+ {% endfor %}
+
+ {% block content_header %}
+
+
+
+ {% endblock %}
+
+
+ {% block content %}
+ {% endblock %}
+
+
+ {% if code is defined %}
+
Code behind this page
+
{{ code|raw }}
+ {% endif %}
+
+
+
diff --git a/src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php b/src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php
new file mode 100644
index 0000000..2941af9
--- /dev/null
+++ b/src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php
@@ -0,0 +1,17 @@
+request('GET', '/demo/hello/Fabien');
+
+ $this->assertTrue($crawler->filter('html:contains("Hello Fabien")')->count() > 0);
+ }
+}
diff --git a/src/Acme/DemoBundle/Twig/Extension/DemoExtension.php b/src/Acme/DemoBundle/Twig/Extension/DemoExtension.php
new file mode 100644
index 0000000..8f6533a
--- /dev/null
+++ b/src/Acme/DemoBundle/Twig/Extension/DemoExtension.php
@@ -0,0 +1,80 @@
+loader = $loader;
+ }
+
+ public function setController($controller)
+ {
+ $this->controller = $controller;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getFunctions()
+ {
+ return array(
+ 'code' => new \Twig_Function_Method($this, 'getCode', array('is_safe' => array('html'))),
+ );
+ }
+
+ public function getCode($template)
+ {
+ $controller = htmlspecialchars($this->getControllerCode(), ENT_QUOTES, 'UTF-8');
+ $template = htmlspecialchars($this->getTemplateCode($template), ENT_QUOTES, 'UTF-8');
+
+ // remove the code block
+ $template = str_replace('{% set code = code(_self) %}', '', $template);
+
+ return <<Controller Code
+$controller
+
+Template Code
+$template
+EOF;
+ }
+
+ protected function getControllerCode()
+ {
+ $class = get_class($this->controller[0]);
+ if (class_exists('CG\Core\ClassUtils')) {
+ $class = ClassUtils::getUserClass($class);
+ }
+
+ $r = new \ReflectionClass($class);
+ $m = $r->getMethod($this->controller[1]);
+
+ $code = file($r->getFilename());
+
+ return ' '.$m->getDocComment()."\n".implode('', array_slice($code, $m->getStartline() - 1, $m->getEndLine() - $m->getStartline() + 1));
+ }
+
+ protected function getTemplateCode($template)
+ {
+ return $this->loader->getSource($template->getTemplateName());
+ }
+
+ /**
+ * Returns the name of the extension.
+ *
+ * @return string The extension name
+ */
+ public function getName()
+ {
+ return 'demo';
+ }
+}
diff --git a/web/.htaccess b/web/.htaccess
new file mode 100644
index 0000000..08dce6f
--- /dev/null
+++ b/web/.htaccess
@@ -0,0 +1,10 @@
+
+ RewriteEngine On
+
+ #
+ # RewriteBase /
+ #
+
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteRule ^(.*)$ app.php [QSA,L]
+
diff --git a/web/app.php b/web/app.php
new file mode 100644
index 0000000..2b4d5e7
--- /dev/null
+++ b/web/app.php
@@ -0,0 +1,24 @@
+register(true);
+*/
+
+require_once __DIR__.'/../app/AppKernel.php';
+//require_once __DIR__.'/../app/AppCache.php';
+
+$kernel = new AppKernel('prod', false);
+$kernel->loadClassCache();
+//$kernel = new AppCache($kernel);
+$request = Request::createFromGlobals();
+$response = $kernel->handle($request);
+$response->send();
+$kernel->terminate($request, $response);
diff --git a/web/app_dev.php b/web/app_dev.php
new file mode 100644
index 0000000..5a05245
--- /dev/null
+++ b/web/app_dev.php
@@ -0,0 +1,30 @@
+loadClassCache();
+$request = Request::createFromGlobals();
+$response = $kernel->handle($request);
+$response->send();
+$kernel->terminate($request, $response);
diff --git a/web/apple-touch-icon.png b/web/apple-touch-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..11f17e6d89ee3b416218ede42b66ec1dd81507f2
GIT binary patch
literal 10784
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
f!getFailedRequirements();
+$minorProblems = $symfonyRequirements->getFailedRecommendations();
+
+?>
+
+
+
+
+
+ Symfony Configuration
+
+
+
+
+
+
+

+
+
+
+
Welcome!
+
Welcome to your new Symfony project.
+
+ This script will guide you through the basic configuration of your project.
+ You can also do the same by editing the ‘app/config/parameters.yml’ file directly.
+
+
+
+
Major problems
+
Major problems have been detected and must be fixed before continuing:
+
+
+ - getHelpHtml() ?>
+
+
+
+
+
+
Recommendations
+
+ Additionally, toTo enhance your Symfony experience,
+ it’s recommended that you fix the following:
+
+
+
+ - getHelpHtml() ?>
+
+
+
+
+ hasPhpIniConfigIssue()): ?>
+
*
+ getPhpIniConfigPath()): ?>
+ Changes to the php.ini file must be done in "getPhpIniConfigPath() ?>".
+
+ To change settings, create a "php.ini".
+
+
+
+
+
+
Your configuration looks good to run Symfony.
+
+
+
+
+
+
+
Symfony Standard Edition
+
+
+
diff --git a/web/favicon.ico b/web/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..864803618e0888f8463c0b30038633c018f939cc
GIT binary patch
literal 1150
zcmaizUr1AN6vuy3^oL%AsH~?RBQobI=ccaNk~J)QQD?41%~lUl4?1&O#PTUgotA-9
zsDZB9Dx!CTsTlUUw?V5x4YK5>5M*n+r|-FL<1!X8KKK0Y+4-K|Ip_DgLX_ZFS}O27
zD6VZ4Vy_V55P%DwO+Snf_;2^FO_X=lLt9ZPzz)z@c~ldI{Q@#slCUp96W9qfs%tQ*oXL6(4`+eocJ>~>XTi!Tx6`NE0#k>{2Oo}
ztK9}W2EBZ;)|i=(L{i>6UU}sHFa>93DOU?()OGNh>)?K^U==8P)fsB(g!Z`H)Oe2K
zAL8V3c}P=UQK;p237iK()-qO$m3q1_)5Uf>)l?g3abZDzzr3uhc^8WX1k|b(vZuwUYd`2nOcXxJ?f6`A^uQ+Js>k0*)1Z4Ms
zn^LJ1IeVQ{e)veSS*BUf_2AsdWHfQT>0~mg)MIP0(fZmtg+pPwU~40@=~Q74tpCV*
z?ho@%#bU9aI76NxIeHwFNF*?aMWwIcY>?`WCUqU3p`BrU7P-H#KQlGy-*EQ!{qC?|
zBHyTwqR}XwX|T}E>o*E#8G_CNzUOjq9hiOEpwp*$E~o3w^mcAenG2uk(7mCIUZ>~%
zB=me1mhaCn;Cq#;BX2o}t+|y3?+$Lc6{R^^&pjZF^
literal 0
HcmV?d00001
diff --git a/web/robots.txt b/web/robots.txt
new file mode 100644
index 0000000..214e411
--- /dev/null
+++ b/web/robots.txt
@@ -0,0 +1,4 @@
+# www.robotstxt.org/
+# www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449
+
+User-agent: *