| @@ -0,0 +1,268 @@ | ||
| 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/2.1/composer.json) | ||
| and | ||
| [`composer.lock`](https://raw.github.com/symfony/symfony-standard/2.1/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 | ||
|
|
||
| Note: You must complete the upgrade steps below so composer can successfully generate the autoload files. | ||
|
|
||
| ### `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): | ||
|
|
||
| <?php | ||
|
|
||
| use Doctrine\Common\Annotations\AnnotationRegistry; | ||
|
|
||
| $loader = include __DIR__.'/../vendor/autoload.php'; | ||
|
|
||
| // intl | ||
| if (!function_exists('intl_get_error_code')) { | ||
| require_once __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php'; | ||
|
|
||
| $loader->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%" | ||
|
|
||
| You can even disable the requirements check on production with `null` as you should | ||
| know that the parameters for URL generation always pass the requirements, e.g. by | ||
| validating them beforehand. This additionally enhances performance. See | ||
| [config_prod.yml](https://github.com/symfony/symfony-standard/blob/master/app/config/config_prod.yml). | ||
|
|
||
| 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), | ||
|
|
||
| You must also rename the DoctrineBundle from: | ||
|
|
||
| new Symfony\Bundle\DoctrineBundle\DoctrineBundle(), | ||
|
|
||
| to: | ||
|
|
||
| new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), | ||
|
|
||
| ### `web/app.php` | ||
|
|
||
| The default `web/app.php` file now reads as follows: | ||
|
|
||
| <?php | ||
|
|
||
| use Symfony\Component\ClassLoader\ApcClassLoader; | ||
| use Symfony\Component\HttpFoundation\Request; | ||
|
|
||
| $loader = require_once __DIR__.'/../app/bootstrap.php.cache'; | ||
|
|
||
| // Use APC for autoloading to improve performance. | ||
| // Change 'sf2' to a unique prefix in order to prevent cache key conflicts | ||
| // with other applications also using APC. | ||
| /* | ||
| $loader = new ApcClassLoader('sf2', $loader); | ||
| $loader->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: | ||
|
|
||
| <?php | ||
|
|
||
| use Symfony\Component\HttpFoundation\Request; | ||
|
|
||
| // If you don't want to setup permissions the proper way, just uncomment the following PHP line | ||
| // read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information | ||
| //umask(0000); | ||
|
|
||
| // This check prevents access to debug front controllers that are deployed by accident to production servers. | ||
| // Feel free to remove this, extend it, or make something more sophisticated. | ||
| if (isset($_SERVER['HTTP_CLIENT_IP']) | ||
| || isset($_SERVER['HTTP_X_FORWARDED_FOR']) | ||
| || !in_array(@$_SERVER['REMOTE_ADDR'], array( | ||
| '127.0.0.1', | ||
| '::1', | ||
| )) | ||
| ) { | ||
| header('HTTP/1.0 403 Forbidden'); | ||
| exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); | ||
| } | ||
|
|
||
| $loader = require_once __DIR__.'/../app/bootstrap.php.cache'; | ||
| require_once __DIR__.'/../app/AppKernel.php'; | ||
|
|
||
| $kernel = new AppKernel('dev', true); | ||
| $kernel->loadClassCache(); | ||
| $request = Request::createFromGlobals(); | ||
| $response = $kernel->handle($request); | ||
| $response->send(); | ||
| $kernel->terminate($request, $response); |
| @@ -0,0 +1,7 @@ | ||
| <IfModule mod_authz_core.c> | ||
| Require all denied | ||
| </IfModule> | ||
| <IfModule !mod_authz_core.c> | ||
| Order deny,allow | ||
| Deny from all | ||
| </IfModule> |
| @@ -0,0 +1,9 @@ | ||
| <?php | ||
|
|
||
| require_once __DIR__.'/AppKernel.php'; | ||
|
|
||
| use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache; | ||
|
|
||
| class AppCache extends HttpCache | ||
| { | ||
| } |
| @@ -0,0 +1,37 @@ | ||
| <?php | ||
|
|
||
| use Symfony\Component\HttpKernel\Kernel; | ||
| use Symfony\Component\Config\Loader\LoaderInterface; | ||
|
|
||
| class AppKernel extends Kernel | ||
| { | ||
| public function registerBundles() | ||
| { | ||
| $bundles = array( | ||
| new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), | ||
| new Symfony\Bundle\SecurityBundle\SecurityBundle(), | ||
| new Symfony\Bundle\TwigBundle\TwigBundle(), | ||
| new Symfony\Bundle\MonologBundle\MonologBundle(), | ||
| new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), | ||
| new Symfony\Bundle\AsseticBundle\AsseticBundle(), | ||
| new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), | ||
| new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), | ||
| new AppBundle\AppBundle(), | ||
| new TEST\PlatformBundle\TESTPlatformBundle(), | ||
| ); | ||
|
|
||
| if (in_array($this->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'); | ||
| } | ||
| } |
| @@ -0,0 +1,13 @@ | ||
| <!DOCTYPE html> | ||
| <html> | ||
| <head> | ||
| <meta charset="UTF-8" /> | ||
| <title>{% block title %}Welcome!{% endblock %}</title> | ||
| {% block stylesheets %}{% endblock %} | ||
| <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" /> | ||
| </head> | ||
| <body> | ||
| {% block body %}{% endblock %} | ||
| {% block javascripts %}{% endblock %} | ||
| </body> | ||
| </html> |
| @@ -0,0 +1,5 @@ | ||
| {% extends 'base.html.twig' %} | ||
|
|
||
| {% block body %} | ||
| Homepage. | ||
| {% endblock %} |
| @@ -0,0 +1,13 @@ | ||
| <?php | ||
|
|
||
| use Doctrine\Common\Annotations\AnnotationRegistry; | ||
| use Composer\Autoload\ClassLoader; | ||
|
|
||
| /** | ||
| * @var ClassLoader $loader | ||
| */ | ||
| $loader = require __DIR__.'/../vendor/autoload.php'; | ||
|
|
||
| AnnotationRegistry::registerLoader(array($loader, 'loadClass')); | ||
|
|
||
| return $loader; |
| @@ -0,0 +1,142 @@ | ||
| <?php | ||
|
|
||
| require_once dirname(__FILE__).'/SymfonyRequirements.php'; | ||
|
|
||
| $lineSize = 70; | ||
| $symfonyRequirements = new SymfonyRequirements(); | ||
| $iniPath = $symfonyRequirements->getPhpIniConfigPath(); | ||
|
|
||
| echo_title('Symfony2 Requirements Checker'); | ||
|
|
||
| echo '> PHP is using the following php.ini file:'.PHP_EOL; | ||
| if ($iniPath) { | ||
| echo_style('green', ' '.$iniPath); | ||
| } else { | ||
| echo_style('warning', ' WARNING: No configuration file (php.ini) used by PHP!'); | ||
| } | ||
|
|
||
| echo PHP_EOL.PHP_EOL; | ||
|
|
||
| echo '> Checking Symfony requirements:'.PHP_EOL.' '; | ||
|
|
||
| $messages = array(); | ||
| foreach ($symfonyRequirements->getRequirements() as $req) { | ||
| /** @var $req Requirement */ | ||
| if ($helpText = get_error_message($req, $lineSize)) { | ||
| echo_style('red', 'E'); | ||
| $messages['error'][] = $helpText; | ||
| } else { | ||
| echo_style('green', '.'); | ||
| } | ||
| } | ||
|
|
||
| $checkPassed = empty($messages['error']); | ||
|
|
||
| foreach ($symfonyRequirements->getRecommendations() as $req) { | ||
| if ($helpText = get_error_message($req, $lineSize)) { | ||
| echo_style('yellow', 'W'); | ||
| $messages['warning'][] = $helpText; | ||
| } else { | ||
| echo_style('green', '.'); | ||
| } | ||
| } | ||
|
|
||
| if ($checkPassed) { | ||
| echo_block('success', 'OK', 'Your system is ready to run Symfony2 projects', true); | ||
| } else { | ||
| echo_block('error', 'ERROR', 'Your system is not ready to run Symfony2 projects', true); | ||
|
|
||
| echo_title('Fix the following mandatory requirements', 'red'); | ||
|
|
||
| foreach ($messages['error'] as $helpText) { | ||
| echo ' * '.$helpText.PHP_EOL; | ||
| } | ||
| } | ||
|
|
||
| if (!empty($messages['warning'])) { | ||
| echo_title('Optional recommendations to improve your setup', 'yellow'); | ||
|
|
||
| foreach ($messages['warning'] as $helpText) { | ||
| echo ' * '.$helpText.PHP_EOL; | ||
| } | ||
| } | ||
|
|
||
| echo PHP_EOL; | ||
| echo_style('title', 'Note'); | ||
| echo ' The command console could use a different php.ini file'.PHP_EOL; | ||
| echo_style('title', '~~~~'); | ||
| echo ' than the one used with your web server. To be on the'.PHP_EOL; | ||
| echo ' safe side, please check the requirements from your web'.PHP_EOL; | ||
| echo ' server using the '; | ||
| echo_style('yellow', 'web/config.php'); | ||
| echo ' script.'.PHP_EOL; | ||
| echo PHP_EOL; | ||
|
|
||
| exit($checkPassed ? 0 : 1); | ||
|
|
||
| function get_error_message(Requirement $requirement, $lineSize) | ||
| { | ||
| if ($requirement->isFulfilled()) { | ||
| return; | ||
| } | ||
|
|
||
| $errorMessage = wordwrap($requirement->getTestMessage(), $lineSize - 3, PHP_EOL.' ').PHP_EOL; | ||
| $errorMessage .= ' > '.wordwrap($requirement->getHelpText(), $lineSize - 5, PHP_EOL.' > ').PHP_EOL; | ||
|
|
||
| return $errorMessage; | ||
| } | ||
|
|
||
| function echo_title($title, $style = null) | ||
| { | ||
| $style = $style ?: 'title'; | ||
|
|
||
| echo PHP_EOL; | ||
| echo_style($style, $title.PHP_EOL); | ||
| echo_style($style, str_repeat('~', strlen($title)).PHP_EOL); | ||
| echo PHP_EOL; | ||
| } | ||
|
|
||
| function echo_style($style, $message) | ||
| { | ||
| // ANSI color codes | ||
| $styles = array( | ||
| 'reset' => "\033[0m", | ||
| 'red' => "\033[31m", | ||
| 'green' => "\033[32m", | ||
| 'yellow' => "\033[33m", | ||
| 'error' => "\033[37;41m", | ||
| 'success' => "\033[37;42m", | ||
| 'title' => "\033[34m", | ||
| ); | ||
| $supports = has_color_support(); | ||
|
|
||
| echo($supports ? $styles[$style] : '').$message.($supports ? $styles['reset'] : ''); | ||
| } | ||
|
|
||
| function echo_block($style, $title, $message) | ||
| { | ||
| $message = ' '.trim($message).' '; | ||
| $width = strlen($message); | ||
|
|
||
| echo PHP_EOL.PHP_EOL; | ||
|
|
||
| echo_style($style, str_repeat(' ', $width).PHP_EOL); | ||
| echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT).PHP_EOL); | ||
| echo_style($style, str_pad($message, $width, ' ', STR_PAD_RIGHT).PHP_EOL); | ||
| echo_style($style, str_repeat(' ', $width).PHP_EOL); | ||
| } | ||
|
|
||
| function has_color_support() | ||
| { | ||
| static $support; | ||
|
|
||
| if (null === $support) { | ||
| if (DIRECTORY_SEPARATOR == '\\') { | ||
| $support = false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI'); | ||
| } else { | ||
| $support = function_exists('posix_isatty') && @posix_isatty(STDOUT); | ||
| } | ||
| } | ||
|
|
||
| return $support; | ||
| } |
| @@ -0,0 +1,72 @@ | ||
| imports: | ||
| - { resource: parameters.yml } | ||
| - { resource: security.yml } | ||
|
|
||
| framework: | ||
| #esi: ~ | ||
| #translator: { fallbacks: ["%locale%"] } | ||
| secret: "%secret%" | ||
| router: | ||
| resource: "%kernel.root_dir%/config/routing.yml" | ||
| strict_requirements: ~ | ||
| form: ~ | ||
| csrf_protection: ~ | ||
| validation: { enable_annotations: true } | ||
| templating: | ||
| engines: ['twig'] | ||
| #assets_version: SomeVersionScheme | ||
| default_locale: "%locale%" | ||
| trusted_hosts: ~ | ||
| trusted_proxies: ~ | ||
| session: | ||
| # handler_id set to null will use default session handler from php.ini | ||
| handler_id: ~ | ||
| fragments: ~ | ||
| http_method_override: true | ||
|
|
||
| # 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 | ||
| # if using pdo_sqlite as your database driver: | ||
| # 1. add the path in parameters.yml | ||
| # e.g. database_path: "%kernel.root_dir%/data/data.db3" | ||
| # 2. Uncomment database_path in parameters.yml.dist | ||
| # 3. Uncomment next line: | ||
| # path: "%database_path%" | ||
|
|
||
| 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 } |
| @@ -0,0 +1,36 @@ | ||
| imports: | ||
| - { resource: config.yml } | ||
|
|
||
| framework: | ||
| router: | ||
| resource: "%kernel.root_dir%/config/routing_dev.yml" | ||
| strict_requirements: true | ||
| profiler: { only_exceptions: false } | ||
|
|
||
| web_profiler: | ||
| toolbar: "%debug_toolbar%" | ||
| intercept_redirects: "%debug_redirects%" | ||
|
|
||
| monolog: | ||
| handlers: | ||
| main: | ||
| type: stream | ||
| path: "%kernel.logs_dir%/%kernel.environment%.log" | ||
| level: debug | ||
| console: | ||
| type: console | ||
| bubble: false | ||
| # uncomment to get logging in your browser | ||
| # you may have to allow bigger header sizes in your Web server configuration | ||
| #firephp: | ||
| # type: firephp | ||
| # level: info | ||
| #chromephp: | ||
| # type: chromephp | ||
| # level: info | ||
|
|
||
| assetic: | ||
| use_controller: "%use_assetic_controller%" | ||
|
|
||
| #swiftmailer: | ||
| # delivery_address: me@example.com |
| @@ -0,0 +1,25 @@ | ||
| imports: | ||
| - { resource: config.yml } | ||
|
|
||
| #framework: | ||
| # validation: | ||
| # cache: apc | ||
|
|
||
| #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 | ||
| console: | ||
| type: console |
| @@ -0,0 +1,16 @@ | ||
| imports: | ||
| - { resource: config_dev.yml } | ||
|
|
||
| framework: | ||
| test: ~ | ||
| session: | ||
| storage_id: session.storage.mock_file | ||
| profiler: | ||
| collect: false | ||
|
|
||
| web_profiler: | ||
| toolbar: false | ||
| intercept_redirects: false | ||
|
|
||
| swiftmailer: | ||
| disable_delivery: true |
| @@ -0,0 +1,24 @@ | ||
| # This file is a "template" of what your parameters.yml file should look like | ||
| parameters: | ||
| database_driver: pdo_mysql | ||
| database_host: 127.0.0.1 | ||
| database_port: ~ | ||
| database_name: symfony | ||
| database_user: root | ||
| database_password: ~ | ||
| # You should uncomment this if you want use pdo_sqlite | ||
| # database_path: "%kernel.root_dir%/data.db3" | ||
|
|
||
| mailer_transport: smtp | ||
| mailer_host: 127.0.0.1 | ||
| mailer_user: ~ | ||
| mailer_password: ~ | ||
|
|
||
| locale: en | ||
|
|
||
| # A secret key that's used to generate certain security-related tokens | ||
| secret: ThisTokenIsNotSoSecretChangeIt | ||
|
|
||
| debug_toolbar: true | ||
| debug_redirects: false | ||
| use_assetic_controller: true |
| @@ -0,0 +1,7 @@ | ||
| test_platform: | ||
| resource: "@TESTPlatformBundle/Resources/config/routing.yml" | ||
| prefix: /platform | ||
|
|
||
| app: | ||
| resource: @AppBundle/Controller/ | ||
| type: annotation |
| @@ -0,0 +1,18 @@ | ||
| _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 | ||
|
|
||
| # AcmeDemoBundle routes (to be removed) | ||
| _acme_demo: | ||
| resource: "@AcmeDemoBundle/Resources/config/routing.yml" |
| @@ -0,0 +1,62 @@ | ||
| # you can read more about security in the related section of the documentation | ||
| # http://symfony.com/doc/current/book/security.html | ||
| security: | ||
| # http://symfony.com/doc/current/book/security.html#encoding-the-user-s-password | ||
| encoders: | ||
| Symfony\Component\Security\Core\User\User: plaintext | ||
|
|
||
| # http://symfony.com/doc/current/book/security.html#hierarchical-roles | ||
| role_hierarchy: | ||
| ROLE_ADMIN: ROLE_USER | ||
| ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] | ||
|
|
||
| # http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers | ||
| providers: | ||
| in_memory: | ||
| memory: | ||
| users: | ||
| user: { password: userpass, roles: [ 'ROLE_USER' ] } | ||
| admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] } | ||
|
|
||
| # the main part of the security, where you can set up firewalls | ||
| # for specific sections of your app | ||
| firewalls: | ||
| # disables authentication for assets and the profiler, adapt it according to your needs | ||
| dev: | ||
| pattern: ^/(_(profiler|wdt)|css|images|js)/ | ||
| security: false | ||
| # the login page has to be accessible for everybody | ||
| demo_login: | ||
| pattern: ^/demo/secured/login$ | ||
| security: false | ||
|
|
||
| # secures part of the application | ||
| demo_secured_area: | ||
| pattern: ^/demo/secured/ | ||
| # it's important to notice that in this case _demo_security_check and _demo_login | ||
| # are route names and that they are specified in the AcmeDemoBundle | ||
| form_login: | ||
| check_path: _demo_security_check | ||
| login_path: _demo_login | ||
| logout: | ||
| path: _demo_logout | ||
| target: _demo | ||
| #anonymous: ~ | ||
| #http_basic: | ||
| # realm: "Secured Demo Area" | ||
| main: | ||
| pattern: ^/ | ||
| anonymous: true | ||
| provider: in_memory | ||
| form_login: | ||
| login_path: login | ||
| check_path: login_check | ||
| logout: | ||
| path: logout | ||
| target: /platform | ||
|
|
||
| # with these settings you can restrict or allow access for different parts | ||
| # of your application based on roles, ip, host or methods | ||
| # http://symfony.com/doc/current/cookbook/security/access_control.html | ||
| access_control: | ||
| #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } |
| @@ -0,0 +1,27 @@ | ||
| #!/usr/bin/env php | ||
| <?php | ||
|
|
||
| // if you don't want to setup permissions the proper way, just uncomment the following PHP line | ||
| // read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information | ||
| //umask(0000); | ||
|
|
||
| set_time_limit(0); | ||
|
|
||
| require_once __DIR__.'/bootstrap.php.cache'; | ||
| require_once __DIR__.'/AppKernel.php'; | ||
|
|
||
| use Symfony\Bundle\FrameworkBundle\Console\Application; | ||
| use Symfony\Component\Console\Input\ArgvInput; | ||
| use Symfony\Component\Debug\Debug; | ||
|
|
||
| $input = new ArgvInput(); | ||
| $env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev'); | ||
| $debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(array('--no-debug', '')) && $env !== 'prod'; | ||
|
|
||
| if ($debug) { | ||
| Debug::enable(); | ||
| } | ||
|
|
||
| $kernel = new AppKernel($env, $debug); | ||
| $application = new Application($kernel); | ||
| $application->run($input); |
| @@ -0,0 +1,36 @@ | ||
| <?xml version="1.0" encoding="UTF-8"?> | ||
|
|
||
| <!-- http://phpunit.de/manual/4.1/en/appendixes.configuration.html --> | ||
| <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
| xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd" | ||
| backupGlobals="false" | ||
| colors="true" | ||
| bootstrap="bootstrap.php.cache" | ||
| > | ||
| <testsuites> | ||
| <testsuite name="Project Test Suite"> | ||
| <directory>../src/*/*Bundle/Tests</directory> | ||
| <directory>../src/*/Bundle/*Bundle/Tests</directory> | ||
| </testsuite> | ||
| </testsuites> | ||
|
|
||
| <!-- | ||
| <php> | ||
| <server name="KERNEL_DIR" value="/path/to/your/app/" /> | ||
| </php> | ||
| --> | ||
|
|
||
| <filter> | ||
| <whitelist> | ||
| <directory>../src</directory> | ||
| <exclude> | ||
| <directory>../src/*Bundle/Resources</directory> | ||
| <directory>../src/*Bundle/Tests</directory> | ||
| <directory>../src/*/*Bundle/Resources</directory> | ||
| <directory>../src/*/*Bundle/Tests</directory> | ||
| <directory>../src/*/Bundle/*Bundle/Resources</directory> | ||
| <directory>../src/*/Bundle/*Bundle/Tests</directory> | ||
| </exclude> | ||
| </whitelist> | ||
| </filter> | ||
| </phpunit> |
| @@ -0,0 +1,62 @@ | ||
| { | ||
| "name": "symfony/framework-standard-edition", | ||
| "license": "MIT", | ||
| "type": "project", | ||
| "description": "The \"Symfony Standard Edition\" distribution", | ||
| "autoload": { | ||
| "psr-0": { "": "src/", "SymfonyStandard": "app/" }, | ||
| "UserBundle": {"src/OC/" } | ||
| }, | ||
| "require": { | ||
| "php": ">=5.3.3", | ||
| "symfony/symfony": "2.5.*", | ||
| "doctrine/orm": "~2.2,>=2.2.3,<2.5", | ||
| "doctrine/dbal": "<2.5", | ||
| "doctrine/doctrine-bundle": "~1.2", | ||
| "twig/extensions": "~1.0", | ||
| "symfony/assetic-bundle": "~2.3", | ||
| "symfony/swiftmailer-bundle": "~2.3", | ||
| "symfony/monolog-bundle": "~2.4", | ||
| "sensio/distribution-bundle": "~3.0,>=3.0.12", | ||
| "sensio/framework-extra-bundle": "~3.0,>=3.0.2", | ||
| "incenteev/composer-parameter-handler": "~2.0", | ||
| "friendsofsymfony/user-bundle": "dev-master" | ||
| }, | ||
| "require-dev": { | ||
| "sensio/generator-bundle": "~2.3" | ||
| }, | ||
| "scripts": { | ||
| "post-root-package-install": [ | ||
| "SymfonyStandard\\Composer::hookRootPackageInstall" | ||
| ], | ||
| "post-install-cmd": [ | ||
| "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", | ||
| "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", | ||
| "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", | ||
| "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", | ||
| "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", | ||
| "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::removeSymfonyStandardFiles" | ||
| ], | ||
| "post-update-cmd": [ | ||
| "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", | ||
| "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", | ||
| "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", | ||
| "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", | ||
| "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", | ||
| "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::removeSymfonyStandardFiles" | ||
| ] | ||
| }, | ||
| "config": { | ||
| "bin-dir": "bin" | ||
| }, | ||
| "extra": { | ||
| "symfony-app-dir": "app", | ||
| "symfony-web-dir": "web", | ||
| "incenteev-parameters": { | ||
| "file": "app/config/parameters.yml" | ||
| }, | ||
| "branch-alias": { | ||
| "dev-master": "2.5-dev" | ||
| } | ||
| } | ||
| } |
| @@ -0,0 +1,7 @@ | ||
| <IfModule mod_authz_core.c> | ||
| Require all denied | ||
| </IfModule> | ||
| <IfModule !mod_authz_core.c> | ||
| Order deny,allow | ||
| Deny from all | ||
| </IfModule> |
| @@ -0,0 +1,9 @@ | ||
| <?php | ||
|
|
||
| namespace Acme\DemoBundle; | ||
|
|
||
| use Symfony\Component\HttpKernel\Bundle\Bundle; | ||
|
|
||
| class AcmeDemoBundle extends Bundle | ||
| { | ||
| } |
| @@ -0,0 +1,48 @@ | ||
| <?php | ||
|
|
||
| namespace Acme\DemoBundle\Command; | ||
|
|
||
| use Symfony\Component\Console\Command\Command; | ||
| use Symfony\Component\Console\Input\InputArgument; | ||
| use Symfony\Component\Console\Input\InputInterface; | ||
| use Symfony\Component\Console\Output\OutputInterface; | ||
|
|
||
| /** | ||
| * Hello World command for demo purposes. | ||
| * | ||
| * You could also extend from Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand | ||
| * to get access to the container via $this->getContainer(). | ||
| * | ||
| * @author Tobias Schultze <http://tobion.de> | ||
| */ | ||
| class HelloWorldCommand extends Command | ||
| { | ||
| /** | ||
| * {@inheritdoc} | ||
| */ | ||
| protected function configure() | ||
| { | ||
| $this | ||
| ->setName('acme:hello') | ||
| ->setDescription('Hello World example command') | ||
| ->addArgument('who', InputArgument::OPTIONAL, 'Who to greet.', 'World') | ||
| ->setHelp(<<<EOF | ||
| The <info>%command.name%</info> command greets somebody or everybody: | ||
| <info>php %command.full_name%</info> | ||
| The optional argument specifies who to greet: | ||
| <info>php %command.full_name%</info> Fabien | ||
| EOF | ||
| ); | ||
| } | ||
|
|
||
| /** | ||
| * {@inheritdoc} | ||
| */ | ||
| protected function execute(InputInterface $input, OutputInterface $output) | ||
| { | ||
| $output->writeln(sprintf('Hello <comment>%s</comment>!', $input->getArgument('who'))); | ||
| } | ||
| } |
| @@ -0,0 +1,56 @@ | ||
| <?php | ||
|
|
||
| namespace Acme\DemoBundle\Controller; | ||
|
|
||
| use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
| use Symfony\Component\HttpFoundation\RedirectResponse; | ||
| use Symfony\Component\HttpFoundation\Request; | ||
| use Acme\DemoBundle\Form\ContactType; | ||
|
|
||
| // these import the "@Route" and "@Template" annotations | ||
| use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | ||
| use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; | ||
|
|
||
| class DemoController extends Controller | ||
| { | ||
| /** | ||
| * @Route("/", name="_demo") | ||
| * @Template() | ||
| */ | ||
| public function indexAction() | ||
| { | ||
| return array(); | ||
| } | ||
|
|
||
| /** | ||
| * @Route("/hello/{name}", name="_demo_hello") | ||
| * @Template() | ||
| */ | ||
| public function helloAction($name) | ||
| { | ||
| return array('name' => $name); | ||
| } | ||
|
|
||
| /** | ||
| * @Route("/contact", name="_demo_contact") | ||
| * @Template() | ||
| */ | ||
| public function contactAction(Request $request) | ||
| { | ||
| $form = $this->createForm(new ContactType()); | ||
| $form->handleRequest($request); | ||
|
|
||
| if ($form->isValid()) { | ||
| $mailer = $this->get('mailer'); | ||
|
|
||
| // .. setup a message and send it | ||
| // http://symfony.com/doc/current/cookbook/email.html | ||
|
|
||
| $request->getSession()->getFlashBag()->set('notice', 'Message sent!'); | ||
|
|
||
| return new RedirectResponse($this->generateUrl('_demo')); | ||
| } | ||
|
|
||
| return array('form' => $form->createView()); | ||
| } | ||
| } |
| @@ -0,0 +1,70 @@ | ||
| <?php | ||
|
|
||
| namespace Acme\DemoBundle\Controller; | ||
|
|
||
| use Symfony\Component\HttpFoundation\Request; | ||
| use Symfony\Component\Security\Core\SecurityContext; | ||
| use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
| use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | ||
| use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; | ||
| use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; | ||
|
|
||
| /** | ||
| * @Route("/demo/secured") | ||
| */ | ||
| class SecuredController extends Controller | ||
| { | ||
| /** | ||
| * @Route("/login", name="_demo_login") | ||
| * @Template() | ||
| */ | ||
| public function loginAction(Request $request) | ||
| { | ||
| if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { | ||
| $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR); | ||
| } else { | ||
| $error = $request->getSession()->get(SecurityContext::AUTHENTICATION_ERROR); | ||
| } | ||
|
|
||
| return array( | ||
| 'last_username' => $request->getSession()->get(SecurityContext::LAST_USERNAME), | ||
| 'error' => $error, | ||
| ); | ||
| } | ||
|
|
||
| /** | ||
| * @Route("/login_check", name="_demo_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") | ||
| * @Security("is_granted('ROLE_ADMIN')") | ||
| * @Template() | ||
| */ | ||
| public function helloadminAction($name) | ||
| { | ||
| return array('name' => $name); | ||
| } | ||
| } |
| @@ -0,0 +1,19 @@ | ||
| <?php | ||
|
|
||
| namespace Acme\DemoBundle\Controller; | ||
|
|
||
| use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
|
|
||
| class WelcomeController extends Controller | ||
| { | ||
| public function indexAction() | ||
| { | ||
| /* | ||
| * The action's view can be rendered using render() method | ||
| * or @Template annotation as demonstrated in DemoController. | ||
| * | ||
| */ | ||
|
|
||
| return $this->render('AcmeDemoBundle:Welcome:index.html.twig'); | ||
| } | ||
| } |
| @@ -0,0 +1,22 @@ | ||
| <?php | ||
|
|
||
| namespace Acme\DemoBundle\DependencyInjection; | ||
|
|
||
| use Symfony\Component\DependencyInjection\ContainerBuilder; | ||
| use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; | ||
| use Symfony\Component\HttpKernel\DependencyInjection\Extension; | ||
| use Symfony\Component\Config\FileLocator; | ||
|
|
||
| class AcmeDemoExtension extends Extension | ||
| { | ||
| public function load(array $configs, ContainerBuilder $container) | ||
| { | ||
| $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); | ||
| $loader->load('services.xml'); | ||
| } | ||
|
|
||
| public function getAlias() | ||
| { | ||
| return 'acme_demo'; | ||
| } | ||
| } |
| @@ -0,0 +1,24 @@ | ||
| <?php | ||
|
|
||
| namespace Acme\DemoBundle\EventListener; | ||
|
|
||
| use Symfony\Component\HttpKernel\HttpKernelInterface; | ||
| use Symfony\Component\HttpKernel\Event\FilterControllerEvent; | ||
| use Acme\DemoBundle\Twig\Extension\DemoExtension; | ||
|
|
||
| class ControllerListener | ||
| { | ||
| protected $extension; | ||
|
|
||
| public function __construct(DemoExtension $extension) | ||
| { | ||
| $this->extension = $extension; | ||
| } | ||
|
|
||
| public function onKernelController(FilterControllerEvent $event) | ||
| { | ||
| if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) { | ||
| $this->extension->setController($event->getController()); | ||
| } | ||
| } | ||
| } |
| @@ -0,0 +1,20 @@ | ||
| <?php | ||
|
|
||
| namespace Acme\DemoBundle\Form; | ||
|
|
||
| use Symfony\Component\Form\AbstractType; | ||
| use Symfony\Component\Form\FormBuilderInterface; | ||
|
|
||
| class ContactType extends AbstractType | ||
| { | ||
| public function buildForm(FormBuilderInterface $builder, array $options) | ||
| { | ||
| $builder->add('email', 'email'); | ||
| $builder->add('message', 'textarea'); | ||
| } | ||
|
|
||
| public function getName() | ||
| { | ||
| return 'contact'; | ||
| } | ||
| } |
| @@ -0,0 +1,12 @@ | ||
| _welcome: | ||
| path: / | ||
| defaults: { _controller: AcmeDemoBundle:Welcome:index } | ||
|
|
||
| _demo_secured: | ||
| resource: "@AcmeDemoBundle/Controller/SecuredController.php" | ||
| type: annotation | ||
|
|
||
| _demo: | ||
| resource: "@AcmeDemoBundle/Controller/DemoController.php" | ||
| type: annotation | ||
| prefix: /demo |
| @@ -0,0 +1,18 @@ | ||
| <?xml version="1.0" ?> | ||
|
|
||
| <container xmlns="http://symfony.com/schema/dic/services" | ||
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
| xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> | ||
|
|
||
| <services> | ||
| <service id="twig.extension.acme.demo" class="Acme\DemoBundle\Twig\Extension\DemoExtension" public="false"> | ||
| <tag name="twig.extension" /> | ||
| <argument type="service" id="twig.loader" /> | ||
| </service> | ||
|
|
||
| <service id="acme.demo.listener" class="Acme\DemoBundle\EventListener\ControllerListener"> | ||
| <tag name="kernel.event_listener" event="kernel.controller" method="onKernelController" /> | ||
| <argument type="service" id="twig.extension.acme.demo" /> | ||
| </service> | ||
| </services> | ||
| </container> |
| @@ -0,0 +1,101 @@ | ||
| body { | ||
| font-size: 14px; | ||
| font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; | ||
| } | ||
| h1.title { | ||
| font-size: 45px; | ||
| padding-bottom: 30px; | ||
| } | ||
| .sf-reset 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; | ||
| } | ||
| #symfony-header { | ||
| position: relative; | ||
| padding: 30px 30px 20px 30px; | ||
| } | ||
| .sf-reset .symfony-blocks-welcome { | ||
| overflow: hidden; | ||
| } | ||
| .sf-reset .symfony-blocks-welcome > div { | ||
| background-color: whitesmoke; | ||
| float: left; | ||
| width: 240px; | ||
| margin-right: 14px; | ||
| text-align: center; | ||
| padding: 26px 20px; | ||
| } | ||
| .sf-reset .symfony-blocks-welcome > div.block-demo { | ||
| margin-right: 0; | ||
| } | ||
| .sf-reset .symfony-blocks-welcome .illustration { | ||
| padding-bottom: 20px; | ||
| } | ||
| .sf-reset .symfony-blocks-help { | ||
| overflow: hidden; | ||
| } | ||
| .sf-reset .symfony-blocks-help { | ||
| margin-top: 30px; | ||
| padding: 18px; | ||
| border: 1px solid #E6E6E6; | ||
| } | ||
| .sf-reset .symfony-blocks-help > div { | ||
| width: 254px; | ||
| float: left; | ||
| } | ||
| .flash-message { | ||
| padding: 10px; | ||
| margin: 5px; | ||
| margin-top: 15px; | ||
| background-color: #ffe; | ||
| } | ||
| .sf-reset .error { | ||
| color: red; | ||
| } | ||
| #login label, #contact_form label { | ||
| display: block; | ||
| float: left; | ||
| width: 90px; | ||
| } | ||
| .sf-reset ul#menu { | ||
| float: right; | ||
| margin-bottom: 20px; | ||
| padding-left: 0; | ||
| } | ||
| .sf-reset #menu li { | ||
| padding-left: 0; | ||
| margin-right: 10px; | ||
| display: inline; | ||
| } | ||
| .sf-reset a, | ||
| .sf-reset li a { | ||
| color: #08C; | ||
| text-decoration: none; | ||
| } | ||
| .sf-reset a:hover, | ||
| .sf-reset li a:hover { | ||
| color: #08C; | ||
| text-decoration: underline; | ||
| } | ||
| .sf-reset .symfony-content pre { | ||
| white-space: pre; | ||
| font-family: monospace; | ||
| } |
| @@ -0,0 +1,15 @@ | ||
| {% extends "AcmeDemoBundle::layout.html.twig" %} | ||
|
|
||
| {% block title "Symfony - Contact form" %} | ||
|
|
||
| {% block content %} | ||
| <form action="{{ path('_demo_contact') }}" method="POST" id="contact_form"> | ||
| {{ form_errors(form) }} | ||
|
|
||
| {{ form_row(form.email) }} | ||
| {{ form_row(form.message) }} | ||
|
|
||
| {{ form_rest(form) }} | ||
| <input type="submit" value="Send" class="symfony-button-grey" /> | ||
| </form> | ||
| {% endblock %} |
| @@ -0,0 +1,9 @@ | ||
| {% extends "AcmeDemoBundle::layout.html.twig" %} | ||
|
|
||
| {% block title "Hello " ~ name %} | ||
|
|
||
| {% block content %} | ||
| <h1>Hello {{ name }}!</h1> | ||
| {% endblock %} | ||
|
|
||
| {% set code = code(_self) %} |
| @@ -0,0 +1,14 @@ | ||
| {% extends "AcmeDemoBundle::layout.html.twig" %} | ||
|
|
||
| {% block title "Symfony - Demos" %} | ||
|
|
||
| {% block content_header '' %} | ||
|
|
||
| {% block content %} | ||
| <h1 class="title">Available demos</h1> | ||
| <ul id="demo-list"> | ||
| <li><a href="{{ path('_demo_hello', {'name': 'World'}) }}">Hello World</a></li> | ||
| <li><a href="{{ path('_demo_secured_hello', {'name': 'World'}) }}">Access the secured area</a> <a href="{{ path('_demo_login') }}">Go to the login page</a></li> | ||
| {# <li><a href="{{ path('_demo_contact') }}">Send a Message</a></li> #} | ||
| </ul> | ||
| {% endblock %} |
| @@ -0,0 +1,11 @@ | ||
| {% extends "AcmeDemoBundle:Secured:layout.html.twig" %} | ||
|
|
||
| {% block title "Hello " ~ name %} | ||
|
|
||
| {% block content %} | ||
| <h1 class="title">Hello {{ name }}!</h1> | ||
|
|
||
| <a href="{{ path('_demo_secured_hello_admin', { 'name': name }) }}">Hello resource secured for <strong>admin</strong> only.</a> | ||
| {% endblock %} | ||
|
|
||
| {% set code = code(_self) %} |
| @@ -0,0 +1,9 @@ | ||
| {% extends "AcmeDemoBundle:Secured:layout.html.twig" %} | ||
|
|
||
| {% block title "Hello " ~ name %} | ||
|
|
||
| {% block content %} | ||
| <h1 class="title">Hello {{ name }} secured for Admins only!</h1> | ||
| {% endblock %} | ||
|
|
||
| {% set code = code(_self) %} |
| @@ -0,0 +1,6 @@ | ||
| {% extends "AcmeDemoBundle::layout.html.twig" %} | ||
|
|
||
| {% block content_header_more %} | ||
| {{ parent() }} | ||
| <li>logged in as <strong>{{ app.user ? app.user.username : 'Anonymous' }}</strong> - <a href="{{ path('_demo_logout') }}">Logout</a></li> | ||
| {% endblock %} |
| @@ -0,0 +1,35 @@ | ||
| {% extends 'AcmeDemoBundle::layout.html.twig' %} | ||
|
|
||
| {% block content %} | ||
| <h1 class="title">Login</h1> | ||
|
|
||
| <p> | ||
| Choose between two default users: <em>user/userpass</em> <small>(ROLE_USER)</small> or <em>admin/adminpass</em> <small>(ROLE_ADMIN)</small> | ||
| </p> | ||
|
|
||
| {% if error %} | ||
| <div class="error">{{ error.message }}</div> | ||
| {% endif %} | ||
|
|
||
| <form action="{{ path("_demo_security_check") }}" method="post" id="login"> | ||
| <div> | ||
| <label for="username">Username</label> | ||
| <input type="text" id="username" name="_username" value="{{ last_username }}" /> | ||
| </div> | ||
|
|
||
| <div> | ||
| <label for="password">Password</label> | ||
| <input type="password" id="password" name="_password" /> | ||
| </div> | ||
|
|
||
| <button type="submit" class="sf-button"> | ||
| <span class="border-l"> | ||
| <span class="border-r"> | ||
| <span class="btn-bg">Login</span> | ||
| </span> | ||
| </span> | ||
| </button> | ||
| </form> | ||
| {% endblock %} | ||
|
|
||
| {% set code = code(_self) %} |
| @@ -0,0 +1,83 @@ | ||
| {% 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')%} | ||
|
|
||
| <h1 class="title">Welcome!</h1> | ||
|
|
||
| <p>Congratulations! You have successfully installed a new Symfony application.</p> | ||
|
|
||
| <div class="symfony-blocks-welcome"> | ||
| <div class="block-quick-tour"> | ||
| <div class="illustration"> | ||
| <img src="{{ asset('bundles/acmedemo/images/welcome-quick-tour.gif') }}" alt="Quick tour" /> | ||
| </div> | ||
| <a href="http://symfony.com/doc/{{ version }}/quick_tour/index.html" class="sf-button sf-button-selected"> | ||
| <span class="border-l"> | ||
| <span class="border-r"> | ||
| <span class="btn-bg">Read the Quick Tour</span> | ||
| </span> | ||
| </span> | ||
| </a> | ||
| </div> | ||
| {% if app.environment == 'dev' %} | ||
| <div class="block-configure"> | ||
| <div class="illustration"> | ||
| <img src="{{ asset('bundles/acmedemo/images/welcome-configure.gif') }}" alt="Configure your application" /> | ||
| </div> | ||
| <a href="{{ path('_configurator_home') }}" class="sf-button sf-button-selected"> | ||
| <span class="border-l"> | ||
| <span class="border-r"> | ||
| <span class="btn-bg">Configure</span> | ||
| </span> | ||
| </span> | ||
| </a> | ||
| </div> | ||
| {% endif %} | ||
| <div class="block-demo"> | ||
| <div class="illustration"> | ||
| <img src="{{ asset('bundles/acmedemo/images/welcome-demo.gif') }}" alt="Demo" /> | ||
| </div> | ||
| <a href="{{ path('_demo') }}" class="sf-button sf-button-selected"> | ||
| <span class="border-l"> | ||
| <span class="border-r"> | ||
| <span class="btn-bg">Run The Demo</span> | ||
| </span> | ||
| </span> | ||
| </a> | ||
| </div> | ||
| </div> | ||
|
|
||
| <div class="symfony-blocks-help"> | ||
| <div class="block-documentation"> | ||
| <ul> | ||
| <li><strong>Documentation</strong></li> | ||
| <li><a href="http://symfony.com/doc/{{ version }}/book/index.html">The Book</a></li> | ||
| <li><a href="http://symfony.com/doc/{{ version }}/cookbook/index.html">The Cookbook</a></li> | ||
| <li><a href="http://symfony.com/doc/{{ version }}/components/index.html">The Components</a></li> | ||
| <li><a href="http://symfony.com/doc/{{ version }}/reference/index.html">Reference</a></li> | ||
| <li><a href="http://symfony.com/doc/{{ version }}/glossary.html">Glossary</a></li> | ||
| </ul> | ||
| </div> | ||
| <div class="block-documentation-more"> | ||
| <ul> | ||
| <li><strong>Sensio</strong></li> | ||
| <li><a href="http://trainings.sensiolabs.com">Trainings</a></li> | ||
| <li><a href="http://books.sensiolabs.com">Books</a></li> | ||
| </ul> | ||
| </div> | ||
| <div class="block-community"> | ||
| <ul> | ||
| <li><strong>Community</strong></li> | ||
| <li><a href="http://symfony.com/irc">IRC channel</a></li> | ||
| <li><a href="http://symfony.com/mailing-lists">Mailing lists</a></li> | ||
| <li><a href="http://forum.symfony-project.org">Forum</a></li> | ||
| <li><a href="http://symfony.com/doc/{{ version }}/contributing/index.html">Contributing</a></li> | ||
| </ul> | ||
| </div> | ||
| </div> | ||
| {% endblock %} |
| @@ -0,0 +1,37 @@ | ||
| {% extends "TwigBundle::layout.html.twig" %} | ||
|
|
||
| {% block head %} | ||
| <link rel="icon" sizes="16x16" href="{{ asset('favicon.ico') }}" /> | ||
| <link rel="stylesheet" href="{{ asset('bundles/acmedemo/css/demo.css') }}" /> | ||
| {% endblock %} | ||
|
|
||
| {% block title 'Demo Bundle' %} | ||
|
|
||
| {% block body %} | ||
| {% for flashMessage in app.session.flashbag.get('notice') %} | ||
| <div class="flash-message"> | ||
| <em>Notice</em>: {{ flashMessage }} | ||
| </div> | ||
| {% endfor %} | ||
|
|
||
| {% block content_header %} | ||
| <ul id="menu"> | ||
| {% block content_header_more %} | ||
| <li><a href="{{ path('_demo') }}">Demo Home</a></li> | ||
| {% endblock %} | ||
| </ul> | ||
|
|
||
| <div style="clear: both"></div> | ||
| {% endblock %} | ||
|
|
||
| <div class="block"> | ||
| {% block content %}{% endblock %} | ||
| </div> | ||
|
|
||
| {% if code is defined %} | ||
| <h2>Code behind this page</h2> | ||
| <div class="block"> | ||
| <div class="symfony-content">{{ code|raw }}</div> | ||
| </div> | ||
| {% endif %} | ||
| {% endblock %} |
| @@ -0,0 +1,45 @@ | ||
| <?php | ||
|
|
||
| namespace Acme\DemoBundle\Tests\Controller; | ||
|
|
||
| use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | ||
|
|
||
| class DemoControllerTest extends WebTestCase | ||
| { | ||
| public function testIndex() | ||
| { | ||
| $client = static::createClient(); | ||
|
|
||
| $crawler = $client->request('GET', '/demo/hello/Fabien'); | ||
|
|
||
| $this->assertGreaterThan(0, $crawler->filter('html:contains("Hello Fabien")')->count()); | ||
| } | ||
|
|
||
| public function testSecureSection() | ||
| { | ||
| $client = static::createClient(); | ||
|
|
||
| // goes to the secure page | ||
| $crawler = $client->request('GET', '/demo/secured/hello/World'); | ||
|
|
||
| // redirects to the login page | ||
| $crawler = $client->followRedirect(); | ||
|
|
||
| // submits the login form | ||
| $form = $crawler->selectButton('Login')->form(array('_username' => 'admin', '_password' => 'adminpass')); | ||
| $client->submit($form); | ||
|
|
||
| // redirect to the original page (but now authenticated) | ||
| $crawler = $client->followRedirect(); | ||
|
|
||
| // check that the page is the right one | ||
| $this->assertCount(1, $crawler->filter('h1.title:contains("Hello World!")')); | ||
|
|
||
| // click on the secure link | ||
| $link = $crawler->selectLink('Hello resource secured')->link(); | ||
| $crawler = $client->click($link); | ||
|
|
||
| // check that the page is the right one | ||
| $this->assertCount(1, $crawler->filter('h1.title:contains("secured for Admins only!")')); | ||
| } | ||
| } |
| @@ -0,0 +1,81 @@ | ||
| <?php | ||
|
|
||
| namespace Acme\DemoBundle\Twig\Extension; | ||
|
|
||
| use CG\Core\ClassUtils; | ||
|
|
||
| class DemoExtension extends \Twig_Extension | ||
| { | ||
| protected $loader; | ||
| protected $controller; | ||
|
|
||
| public function __construct(\Twig_LoaderInterface $loader) | ||
| { | ||
| $this->loader = $loader; | ||
| } | ||
|
|
||
| public function setController($controller) | ||
| { | ||
| $this->controller = $controller; | ||
| } | ||
|
|
||
| /** | ||
| * {@inheritdoc} | ||
| */ | ||
| public function getFunctions() | ||
| { | ||
| return array( | ||
| new \Twig_SimpleFunction('code', array($this, 'getCode'), array('is_safe' => array('html'))), | ||
| ); | ||
| } | ||
|
|
||
| public function getCode($template) | ||
| { | ||
| // highlight_string highlights php code only if '<?php' tag is present. | ||
| $controller = highlight_string("<?php".$this->getControllerCode(), true); | ||
| $controller = str_replace('<span style="color: #0000BB"><?php </span>', ' ', $controller); | ||
|
|
||
| $template = htmlspecialchars($this->getTemplateCode($template), ENT_QUOTES, 'UTF-8'); | ||
|
|
||
| // remove the code block | ||
| $template = str_replace('{% set code = code(_self) %}', '', $template); | ||
|
|
||
| return <<<EOF | ||
| <p><strong>Controller Code</strong></p> | ||
| <pre>$controller</pre> | ||
| <p><strong>Template Code</strong></p> | ||
| <pre>$template</pre> | ||
| 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'; | ||
| } | ||
| } |
| @@ -0,0 +1,9 @@ | ||
| <?php | ||
|
|
||
| namespace AppBundle; | ||
|
|
||
| use Symfony\Component\HttpKernel\Bundle\Bundle; | ||
|
|
||
| class AppBundle extends Bundle | ||
| { | ||
| } |
| @@ -0,0 +1,17 @@ | ||
| <?php | ||
|
|
||
| namespace AppBundle\Controller; | ||
|
|
||
| use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | ||
| use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
|
|
||
| class DefaultController extends Controller | ||
| { | ||
| /** | ||
| * @Route("/app/example", name="homepage") | ||
| */ | ||
| public function indexAction() | ||
| { | ||
| return $this->render('default/index.html.twig'); | ||
| } | ||
| } |
| @@ -0,0 +1,17 @@ | ||
| <?php | ||
|
|
||
| namespace AppBundle\Tests\Controller; | ||
|
|
||
| use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | ||
|
|
||
| class DefaultControllerTest extends WebTestCase | ||
| { | ||
| public function testIndex() | ||
| { | ||
| $client = static::createClient(); | ||
|
|
||
| $crawler = $client->request('GET', '/'); | ||
|
|
||
| $this->assertTrue($crawler->filter('html:contains("Homepage")')->count() > 0); | ||
| } | ||
| } |
| @@ -0,0 +1,13 @@ | ||
| <?php | ||
|
|
||
| namespace TEST\PlatformBundle\Controller; | ||
|
|
||
| use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
|
|
||
| class DefaultController extends Controller | ||
| { | ||
| public function indexAction($name) | ||
| { | ||
| return $this->render('TESTPlatformBundle:Default:index.html.twig', array('name' => $name)); | ||
| } | ||
| } |
| @@ -0,0 +1,45 @@ | ||
| <?php | ||
|
|
||
| // src/OC/PlatformBundle/Controller/AdvertController.php | ||
|
|
||
| namespace TEST\PlatformBundle\Controller; | ||
|
|
||
| use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
| use Symfony\Component\HttpFoundation\Response; | ||
|
|
||
| class PhotoController extends Controller | ||
| { | ||
| public function indexAction() | ||
| { | ||
| $content = $this | ||
| ->get('templating') | ||
| ->render('TESTPlatformBundle:Photo:index.html.twig', array( | ||
| 'name' => 'World' | ||
| ) | ||
| ); | ||
| return new Response("$content"); | ||
| } | ||
|
|
||
| public function addFormularAction() | ||
| { | ||
| $content = $this | ||
| ->get('templating') | ||
| ->render('TESTPlatformBundle:Photo:add_formular.html.twig', array( | ||
| ) | ||
| ); | ||
| return new Response("$content"); | ||
| } | ||
|
|
||
| public function viewAction($soc_name, $title, $ext) | ||
| { | ||
| $content = $this | ||
| ->get('templating') | ||
| ->render('TESTPlatformBundle:Photo:view_photo.html.twig', array( | ||
| 'soc_name' => $soc_name, | ||
| 'title' => $title, | ||
| 'ext' => $ext | ||
| ) | ||
| ); | ||
| return new Response("$content"); | ||
| } | ||
| } |
| @@ -0,0 +1,29 @@ | ||
| <?php | ||
|
|
||
| namespace TEST\PlatformBundle\DependencyInjection; | ||
|
|
||
| use Symfony\Component\Config\Definition\Builder\TreeBuilder; | ||
| use Symfony\Component\Config\Definition\ConfigurationInterface; | ||
|
|
||
| /** | ||
| * This is the class that validates and merges configuration from your app/config files | ||
| * | ||
| * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html#cookbook-bundles-extension-config-class} | ||
| */ | ||
| class Configuration implements ConfigurationInterface | ||
| { | ||
| /** | ||
| * {@inheritdoc} | ||
| */ | ||
| public function getConfigTreeBuilder() | ||
| { | ||
| $treeBuilder = new TreeBuilder(); | ||
| $rootNode = $treeBuilder->root('test_platform'); | ||
|
|
||
| // Here you should define the parameters that are allowed to | ||
| // configure your bundle. See the documentation linked above for | ||
| // more information on that topic. | ||
|
|
||
| return $treeBuilder; | ||
| } | ||
| } |
| @@ -0,0 +1,28 @@ | ||
| <?php | ||
|
|
||
| namespace TEST\PlatformBundle\DependencyInjection; | ||
|
|
||
| use Symfony\Component\DependencyInjection\ContainerBuilder; | ||
| use Symfony\Component\Config\FileLocator; | ||
| use Symfony\Component\HttpKernel\DependencyInjection\Extension; | ||
| use Symfony\Component\DependencyInjection\Loader; | ||
|
|
||
| /** | ||
| * This is the class that loads and manages your bundle configuration | ||
| * | ||
| * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html} | ||
| */ | ||
| class TESTPlatformExtension extends Extension | ||
| { | ||
| /** | ||
| * {@inheritdoc} | ||
| */ | ||
| public function load(array $configs, ContainerBuilder $container) | ||
| { | ||
| $configuration = new Configuration(); | ||
| $config = $this->processConfiguration($configuration, $configs); | ||
|
|
||
| $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); | ||
| $loader->load('services.yml'); | ||
| } | ||
| } |
| @@ -0,0 +1,189 @@ | ||
| <?php | ||
|
|
||
| namespace TEST\PlatformBundle\Entity; | ||
|
|
||
| use Doctrine\ORM\Mapping as ORM; | ||
|
|
||
| /** | ||
| * Photo | ||
| * | ||
| * @ORM\Table() | ||
| * @ORM\Entity(repositoryClass="TEST\PlatformBundle\Entity\PhotoRepository") | ||
| */ | ||
| class Photo | ||
| { | ||
| /** | ||
| * @var integer | ||
| * | ||
| * @ORM\Column(name="id", type="integer") | ||
| * @ORM\Id | ||
| * @ORM\GeneratedValue(strategy="AUTO") | ||
| */ | ||
| private $id; | ||
|
|
||
| /** | ||
| * @var string | ||
| * | ||
| * @ORM\Column(name="owner", type="string", length=255) | ||
| */ | ||
| private $owner; | ||
|
|
||
| /** | ||
| * @var \DateTime | ||
| * | ||
| * @ORM\Column(name="date_added", type="datetime") | ||
| */ | ||
| private $dateAdded; | ||
|
|
||
| /** | ||
| * @var string | ||
| * | ||
| * @ORM\Column(name="title", type="string", length=255) | ||
| */ | ||
| private $title; | ||
|
|
||
| /** | ||
| * @var string | ||
| * | ||
| * @ORM\Column(name="society", type="string", length=255) | ||
| */ | ||
| private $society; | ||
|
|
||
| /** | ||
| * @var string | ||
| * | ||
| * @ORM\Column(name="exention", type="string", length=255) | ||
| */ | ||
| private $exention; | ||
|
|
||
|
|
||
| /** | ||
| * Get id | ||
| * | ||
| * @return integer | ||
| */ | ||
| public function getId() | ||
| { | ||
| return $this->id; | ||
| } | ||
|
|
||
| /** | ||
| * Set owner | ||
| * | ||
| * @param string $owner | ||
| * @return Photo | ||
| */ | ||
| public function setOwner($owner) | ||
| { | ||
| $this->owner = $owner; | ||
|
|
||
| return $this; | ||
| } | ||
|
|
||
| /** | ||
| * Get owner | ||
| * | ||
| * @return string | ||
| */ | ||
| public function getOwner() | ||
| { | ||
| return $this->owner; | ||
| } | ||
|
|
||
| /** | ||
| * Set dateAdded | ||
| * | ||
| * @param \DateTime $dateAdded | ||
| * @return Photo | ||
| */ | ||
| public function setDateAdded($dateAdded) | ||
| { | ||
| $this->dateAdded = $dateAdded; | ||
|
|
||
| return $this; | ||
| } | ||
|
|
||
| /** | ||
| * Get dateAdded | ||
| * | ||
| * @return \DateTime | ||
| */ | ||
| public function getDateAdded() | ||
| { | ||
| return $this->dateAdded; | ||
| } | ||
|
|
||
| /** | ||
| * Set title | ||
| * | ||
| * @param string $title | ||
| * @return Photo | ||
| */ | ||
| public function setTitle($title) | ||
| { | ||
| $this->title = $title; | ||
|
|
||
| return $this; | ||
| } | ||
|
|
||
| /** | ||
| * Get title | ||
| * | ||
| * @return string | ||
| */ | ||
| public function getTitle() | ||
| { | ||
| return $this->title; | ||
| } | ||
|
|
||
| /** | ||
| * Set society | ||
| * | ||
| * @param string $society | ||
| * @return Photo | ||
| */ | ||
| public function setSociety($society) | ||
| { | ||
| $this->society = $society; | ||
|
|
||
| return $this; | ||
| } | ||
|
|
||
| /** | ||
| * Get society | ||
| * | ||
| * @return string | ||
| */ | ||
| public function getSociety() | ||
| { | ||
| return $this->society; | ||
| } | ||
|
|
||
| /** | ||
| * Set exention | ||
| * | ||
| * @param string $exention | ||
| * @return Photo | ||
| */ | ||
| public function setExention($exention) | ||
| { | ||
| $this->exention = $exention; | ||
|
|
||
| return $this; | ||
| } | ||
|
|
||
| /** | ||
| * Get exention | ||
| * | ||
| * @return string | ||
| */ | ||
| public function getExention() | ||
| { | ||
| return $this->exention; | ||
| } | ||
|
|
||
| public function __construc($society, $title, $exention, $owner) | ||
| { | ||
| $this->dateAdded = new \DateTime(); | ||
| } | ||
| } |
| @@ -0,0 +1,15 @@ | ||
| <?php | ||
|
|
||
| namespace TEST\PlatformBundle\Entity; | ||
|
|
||
| use Doctrine\ORM\EntityRepository; | ||
|
|
||
| /** | ||
| * PhotoRepository | ||
| * | ||
| * This class was generated by the Doctrine ORM. Add your own custom | ||
| * repository methods below. | ||
| */ | ||
| class PhotoRepository extends EntityRepository | ||
| { | ||
| } |
| @@ -0,0 +1,11 @@ | ||
| test_platform_homepage: | ||
| path: / | ||
| defaults: { _controller: TESTPlatformBundle:Photo:index } | ||
|
|
||
| test_platform_view: | ||
| path: /{soc_name}/{title}/fichier.{ext} | ||
| defaults: { _controller: TESTPlatformBundle:Photo:view } | ||
|
|
||
| test_platform_addPhoto: | ||
| path: /add | ||
| defaults: { _controller: TESTPlatformBundle:Photo:addFormular } |
| @@ -0,0 +1,4 @@ | ||
| services: | ||
| # test_platform.example: | ||
| # class: TEST\PlatformBundle\Example | ||
| # arguments: [@service_id, "plain_value", %parameter%] |
| @@ -0,0 +1,5 @@ | ||
| <html> | ||
| <body> | ||
| Hello {{ name }}! | ||
| </body> | ||
| </html> |
| @@ -0,0 +1,13 @@ | ||
| <!DOCTYPE html> | ||
| <html> | ||
| <head> | ||
| <title>add a photo</title> | ||
| </head> | ||
| <body> | ||
| <h1>Hello !</h1> | ||
|
|
||
| <p> | ||
| here is formular to add a photo | ||
| </p> | ||
| </body> | ||
| </html> |
| @@ -0,0 +1,18 @@ | ||
| {# src/OC/PlatformBundle/Resources/views/Advert/index.html.twig #} | ||
|
|
||
| <!DOCTYPE html> | ||
| <html> | ||
| <head> | ||
| <title>Bienvenue sur l'index</title> | ||
| </head> | ||
| <body> | ||
| <h1>Hello {{ name }} !</h1> | ||
|
|
||
| <p> | ||
| Le Hello World est un grand classique en programmation. | ||
| Il signifie énormément, car cela veut dire que vous avez | ||
| réussi à exécuter le programme pour accomplir une tâche simple : | ||
| afficher ce hello world ! | ||
| </p> | ||
| </body> | ||
| </html> |
| @@ -0,0 +1,13 @@ | ||
| <!DOCTYPE html> | ||
| <html> | ||
| <head> | ||
| <title>all Pictures</title> | ||
| </head> | ||
| <body> | ||
| <h1>Here is picture carac</h1> | ||
|
|
||
| <p> | ||
| cette photo appartient a la societe {{ soc_name }} et s'apelle {{ title }}. Elle est un fichier d'extention {{ext}}. | ||
| </p> | ||
| </body> | ||
| </html> |
| @@ -0,0 +1,9 @@ | ||
| <?php | ||
|
|
||
| namespace TEST\PlatformBundle; | ||
|
|
||
| use Symfony\Component\HttpKernel\Bundle\Bundle; | ||
|
|
||
| class TESTPlatformBundle extends Bundle | ||
| { | ||
| } |
| @@ -0,0 +1,17 @@ | ||
| <?php | ||
|
|
||
| namespace TEST\PlatformBundle\Tests\Controller; | ||
|
|
||
| use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; | ||
|
|
||
| class DefaultControllerTest extends WebTestCase | ||
| { | ||
| public function testIndex() | ||
| { | ||
| $client = static::createClient(); | ||
|
|
||
| $crawler = $client->request('GET', '/hello/Fabien'); | ||
|
|
||
| $this->assertTrue($crawler->filter('html:contains("Hello Fabien")')->count() > 0); | ||
| } | ||
| } |
| @@ -0,0 +1,56 @@ | ||
| # Use the front controller as index file. It serves as a fallback solution when | ||
| # every other rewrite/redirect fails (e.g. in an aliased environment without | ||
| # mod_rewrite). Additionally, this reduces the matching process for the | ||
| # start page (path "/") because otherwise Apache will apply the rewriting rules | ||
| # to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl). | ||
| DirectoryIndex app.php | ||
|
|
||
| <IfModule mod_rewrite.c> | ||
| RewriteEngine On | ||
|
|
||
| # Determine the RewriteBase automatically and set it as environment variable. | ||
| # If you are using Apache aliases to do mass virtual hosting or installed the | ||
| # project in a subdirectory, the base path will be prepended to allow proper | ||
| # resolution of the app.php file and to redirect to the correct URI. It will | ||
| # work in environments without path prefix as well, providing a safe, one-size | ||
| # fits all solution. But as you do not need it in this case, you can comment | ||
| # the following 2 lines to eliminate the overhead. | ||
| RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ | ||
| RewriteRule ^(.*) - [E=BASE:%1] | ||
|
|
||
| # Sets the HTTP_AUTHORIZATION header removed by apache | ||
| RewriteCond %{HTTP:Authorization} . | ||
| RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] | ||
|
|
||
| # Redirect to URI without front controller to prevent duplicate content | ||
| # (with and without `/app.php`). Only do this redirect on the initial | ||
| # rewrite by Apache and not on subsequent cycles. Otherwise we would get an | ||
| # endless redirect loop (request -> rewrite to front controller -> | ||
| # redirect -> request -> ...). | ||
| # So in case you get a "too many redirects" error or you always get redirected | ||
| # to the start page because your Apache does not expose the REDIRECT_STATUS | ||
| # environment variable, you have 2 choices: | ||
| # - disable this feature by commenting the following 2 lines or | ||
| # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the | ||
| # following RewriteCond (best solution) | ||
| RewriteCond %{ENV:REDIRECT_STATUS} ^$ | ||
| RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L] | ||
|
|
||
| # If the requested filename exists, simply serve it. | ||
| # We only want to let Apache serve files and not directories. | ||
| RewriteCond %{REQUEST_FILENAME} -f | ||
| RewriteRule .? - [L] | ||
|
|
||
| # Rewrite all other queries to the front controller. | ||
| RewriteRule .? %{ENV:BASE}/app.php [L] | ||
| </IfModule> | ||
|
|
||
| <IfModule !mod_rewrite.c> | ||
| <IfModule mod_alias.c> | ||
| # When mod_rewrite is not available, we instruct a temporary redirect of | ||
| # the start page to the front controller explicitly so that the website | ||
| # and the generated links can still be used. | ||
| RedirectMatch 302 ^/$ /app.php/ | ||
| # RedirectTemp cannot be used instead | ||
| </IfModule> | ||
| </IfModule> |
| @@ -0,0 +1,29 @@ | ||
| <?php | ||
|
|
||
| use Symfony\Component\ClassLoader\ApcClassLoader; | ||
| use Symfony\Component\HttpFoundation\Request; | ||
|
|
||
| $loader = require_once __DIR__.'/../app/bootstrap.php.cache'; | ||
|
|
||
| // Use APC for autoloading to improve performance. | ||
| // Change 'sf2' to a unique prefix in order to prevent cache key conflicts | ||
| // with other applications also using APC. | ||
| /* | ||
| $apcLoader = new ApcClassLoader('sf2', $loader); | ||
| $loader->unregister(); | ||
| $apcLoader->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); | ||
|
|
||
| // When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter | ||
| //Request::enableHttpMethodParameterOverride(); | ||
| $request = Request::createFromGlobals(); | ||
| $response = $kernel->handle($request); | ||
| $response->send(); | ||
| $kernel->terminate($request, $response); |
| @@ -0,0 +1,23 @@ | ||
| <?php | ||
|
|
||
| use Symfony\Component\HttpFoundation\Request; | ||
| use Symfony\Component\Debug\Debug; | ||
|
|
||
| // If you don't want to setup permissions the proper way, just uncomment the following PHP line | ||
| // read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information | ||
| //umask(0000); | ||
|
|
||
| // This check prevents access to debug front controllers that are deployed by accident to production servers. | ||
| // Feel free to remove this, extend it, or make something more sophisticated. | ||
|
|
||
| $loader = require_once __DIR__.'/../app/bootstrap.php.cache'; | ||
| Debug::enable(); | ||
|
|
||
| require_once __DIR__.'/../app/AppKernel.php'; | ||
|
|
||
| $kernel = new AppKernel('dev', true); | ||
| $kernel->loadClassCache(); | ||
| $request = Request::createFromGlobals(); | ||
| $response = $kernel->handle($request); | ||
| $response->send(); | ||
| $kernel->terminate($request, $response); |
| @@ -0,0 +1,124 @@ | ||
| <?php | ||
|
|
||
| if (!isset($_SERVER['HTTP_HOST'])) { | ||
| exit('This script cannot be run from the CLI. Run it from a browser.'); | ||
| } | ||
|
|
||
| if (!in_array(@$_SERVER['REMOTE_ADDR'], array( | ||
| '127.0.0.1', | ||
| '::1', | ||
| ))) { | ||
| header('HTTP/1.0 403 Forbidden'); | ||
| exit('This script is only accessible from localhost.'); | ||
| } | ||
|
|
||
| require_once dirname(__FILE__).'/../app/SymfonyRequirements.php'; | ||
|
|
||
| $symfonyRequirements = new SymfonyRequirements(); | ||
|
|
||
| $majorProblems = $symfonyRequirements->getFailedRequirements(); | ||
| $minorProblems = $symfonyRequirements->getFailedRecommendations(); | ||
|
|
||
| ?> | ||
| <!DOCTYPE html> | ||
| <html> | ||
| <head> | ||
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> | ||
| <meta name="robots" content="noindex,nofollow" /> | ||
| <title>Symfony Configuration</title> | ||
| <link rel="stylesheet" href="bundles/framework/css/structure.css" media="all" /> | ||
| <link rel="stylesheet" href="bundles/framework/css/body.css" media="all" /> | ||
| <link rel="stylesheet" href="bundles/sensiodistribution/webconfigurator/css/install.css" media="all" /> | ||
| </head> | ||
| <body> | ||
| <div id="content"> | ||
| <div class="header clear-fix"> | ||
| <div class="header-logo"> | ||
| <img src="bundles/framework/images/logo_symfony.png" alt="Symfony" /> | ||
| </div> | ||
|
|
||
| <div class="search"> | ||
| <form method="get" action="http://symfony.com/search"> | ||
| <div class="form-row"> | ||
|
|
||
| <label for="search-id"> | ||
| <img src="bundles/framework/images/grey_magnifier.png" alt="Search on Symfony website" /> | ||
| </label> | ||
|
|
||
| <input name="q" id="search-id" type="search" placeholder="Search on Symfony website" /> | ||
|
|
||
| <button type="submit" class="sf-button"> | ||
| <span class="border-l"> | ||
| <span class="border-r"> | ||
| <span class="btn-bg">OK</span> | ||
| </span> | ||
| </span> | ||
| </button> | ||
| </div> | ||
| </form> | ||
| </div> | ||
| </div> | ||
|
|
||
| <div class="sf-reset"> | ||
| <div class="block"> | ||
| <div class="symfony-block-content"> | ||
| <h1 class="title">Welcome!</h1> | ||
| <p>Welcome to your new Symfony project.</p> | ||
| <p> | ||
| This script will guide you through the basic configuration of your project. | ||
| You can also do the same by editing the ‘<strong>app/config/parameters.yml</strong>’ file directly. | ||
| </p> | ||
|
|
||
| <?php if (count($majorProblems)): ?> | ||
| <h2 class="ko">Major problems</h2> | ||
| <p>Major problems have been detected and <strong>must</strong> be fixed before continuing:</p> | ||
| <ol> | ||
| <?php foreach ($majorProblems as $problem): ?> | ||
| <li><?php echo $problem->getHelpHtml() ?></li> | ||
| <?php endforeach; ?> | ||
| </ol> | ||
| <?php endif; ?> | ||
|
|
||
| <?php if (count($minorProblems)): ?> | ||
| <h2>Recommendations</h2> | ||
| <p> | ||
| <?php if (count($majorProblems)): ?>Additionally, to<?php else: ?>To<?php endif; ?> enhance your Symfony experience, | ||
| it’s recommended that you fix the following: | ||
| </p> | ||
| <ol> | ||
| <?php foreach ($minorProblems as $problem): ?> | ||
| <li><?php echo $problem->getHelpHtml() ?></li> | ||
| <?php endforeach; ?> | ||
| </ol> | ||
| <?php endif; ?> | ||
|
|
||
| <?php if ($symfonyRequirements->hasPhpIniConfigIssue()): ?> | ||
| <p id="phpini">* | ||
| <?php if ($symfonyRequirements->getPhpIniConfigPath()): ?> | ||
| Changes to the <strong>php.ini</strong> file must be done in "<strong><?php echo $symfonyRequirements->getPhpIniConfigPath() ?></strong>". | ||
| <?php else: ?> | ||
| To change settings, create a "<strong>php.ini</strong>". | ||
| <?php endif; ?> | ||
| </p> | ||
| <?php endif; ?> | ||
|
|
||
| <?php if (!count($majorProblems) && !count($minorProblems)): ?> | ||
| <p class="ok">Your configuration looks good to run Symfony.</p> | ||
| <?php endif; ?> | ||
|
|
||
| <ul class="symfony-install-continue"> | ||
| <?php if (!count($majorProblems)): ?> | ||
| <li><a href="app_dev.php/_configurator/">Configure your Symfony Application online</a></li> | ||
| <li><a href="app_dev.php/">Bypass configuration and go to the Welcome page</a></li> | ||
| <?php endif; ?> | ||
| <?php if (count($majorProblems) || count($minorProblems)): ?> | ||
| <li><a href="config.php">Re-check configuration</a></li> | ||
| <?php endif; ?> | ||
| </ul> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="version">Symfony Standard Edition</div> | ||
| </div> | ||
| </body> | ||
| </html> |
| @@ -0,0 +1,4 @@ | ||
| # www.robotstxt.org/ | ||
| # www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449 | ||
|
|
||
| User-agent: * |