Browse Source

[FrameworkBundle] added a skeleton for configuration in plain PHP

Fabien Potencier 15 năm trước cách đây
mục cha
commit
3f270f5faa
25 tập tin đã thay đổi với 202 bổ sung114 xóa
  1. 5 5
      src/Symfony/Bundle/FrameworkBundle/Command/InitApplicationCommand.php
  2. 0 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/generic/Cache.php
  3. 2 2
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/Kernel.php
  4. 0 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/generic/cache/.symfony
  5. 0 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/generic/console
  6. 0 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/generic/logs/.symfony
  7. 0 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/generic/phpunit.xml.dist
  8. 32 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/config.php
  9. 12 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/config_dev.php
  10. 3 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/config_prod.php
  11. 10 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/config_test.php
  12. 12 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/routing.php
  13. 0 54
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/xml/Kernel.php
  14. 0 13
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/Cache.php
  15. 0 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/cache/.symfony
  16. 0 11
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/console
  17. 0 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/logs/.symfony
  18. 0 29
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/phpunit.xml.dist
  19. 0 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yml/config/config.yml
  20. 0 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yml/config/config_dev.yml
  21. 0 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yml/config/config_prod.yml
  22. 0 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yml/config/config_test.yml
  23. 0 0
      src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yml/config/routing.yml
  24. 79 0
      src/Symfony/Bundle/FrameworkBundle/Tests/Command/InitApplicationCommandTest.php
  25. 47 0
      src/Symfony/Bundle/FrameworkBundle/Tests/Command/TestCaseMethod.tpl

+ 5 - 5
src/Symfony/Bundle/FrameworkBundle/Command/InitApplicationCommand.php

@@ -39,7 +39,7 @@ class InitApplicationCommand extends BaseCommand
                 new InputArgument('name', InputArgument::REQUIRED, 'The application name (Hello)'),
                 new InputArgument('path', InputArgument::REQUIRED, 'The path to the application (hello/)'),
                 new InputArgument('web_path', InputArgument::REQUIRED, 'The path to the public web root (web/)'),
-                new InputOption('yaml', '', InputOption::PARAMETER_NONE, 'Use YAML for configuration files'),
+                new InputOption('format', '', InputOption::PARAMETER_REQUIRED, 'Use the format for configuration files (php, xml, or yaml)', 'xml'),
             ))
             ->setName('init:application')
         ;
@@ -59,15 +59,15 @@ class InitApplicationCommand extends BaseCommand
         }
 
         $parameters = array(
-            'class' => $input->getArgument('name'),
+            'class'       => $input->getArgument('name'),
             'application' => strtolower($input->getArgument('name')),
+            'format'      => $input->getOption('format'),
         );
 
-        $format = $input->getOption('yaml') ? 'yaml' : 'xml';
-
         $filesystem = new Filesystem();
 
-        $filesystem->mirror(__DIR__.'/../Resources/skeleton/application/'.$format, $targetDir);
+        $filesystem->mirror(__DIR__.'/../Resources/skeleton/application/generic', $targetDir);
+        $filesystem->mirror(__DIR__.'/../Resources/skeleton/application/'.$input->getOption('format'), $targetDir);
         Mustache::renderDir($targetDir, $parameters);
         $filesystem->chmod($targetDir.'/console', 0777);
         $filesystem->chmod($targetDir.'/logs', 0777);

src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/xml/Cache.php → src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/generic/Cache.php


+ 2 - 2
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/Kernel.php

@@ -5,7 +5,7 @@ require_once __DIR__.'/../src/autoload.php';
 use Symfony\Framework\Kernel;
 use Symfony\Components\DependencyInjection\Loader\LoaderInterface;
 
-use Symfony\Framework\Bundle\KernelBundle;
+use Symfony\Framework\KernelBundle;
 use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
 use Symfony\Bundle\ZendBundle\ZendBundle;
 use Symfony\Bundle\DoctrineBundle\DoctrineBundle;
@@ -49,6 +49,6 @@ class {{ class }}Kernel extends Kernel
 
     public function registerContainerConfiguration(LoaderInterface $loader)
     {
-        $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
+        $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.{{ format }}');
     }
 }

src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/xml/cache/.symfony → src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/generic/cache/.symfony


src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/xml/console → src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/generic/console


src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/xml/logs/.symfony → src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/generic/logs/.symfony


src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/xml/phpunit.xml.dist → src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/generic/phpunit.xml.dist


+ 32 - 0
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/config.php

@@ -0,0 +1,32 @@
+<?php
+
+$container->setParameter('kernel.include_core_classes', false);
+
+$container->getExtension('kernel')->load('config', array(
+    'charset'             => 'UTF-8',
+    'error_handler_level' => null,
+), $container);
+
+$container->getExtension('web')->load('config', array(
+    'router' => array('resource' => '%kernel.root_dir%/config/routing.php'),
+), $container);
+
+$container->getExtension('web')->load('templating', array(
+    'escaping'       => "htmlspecialchars",
+    'assets_version' => "SomeVersionScheme",
+), $container);
+
+$container->getExtension('doctrine')->load('dbal', array(
+    'dbname'   => 'xxxxxxxx',
+    'user'     => 'root',
+    'password' => '',
+), $container);
+
+$container->getExtension('doctrine')->load('orm', array(
+), $container);
+
+$container->getExtension('swift')->load('mailer', array(
+    'transport' => "gmail",
+    'username'  => "xxxxxxxx",
+    'password'  => "xxxxxxxx",
+), $container);

+ 12 - 0
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/config_dev.php

@@ -0,0 +1,12 @@
+<?php
+
+$loader->import('config.php');
+
+$container->getExtension('zend')->load('logger', array(
+    'priority' => 'info',
+    'path'     => '%kernel.logs_dir%/%kernel.environment%.log',
+), $container);
+
+$container->getExtension('web')->load('config', array(
+    'toolbar' => true,
+), $container);

+ 3 - 0
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/config_prod.php

@@ -0,0 +1,3 @@
+<?php
+
+$loader->import('config.php');

+ 10 - 0
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/config_test.php

@@ -0,0 +1,10 @@
+<?php
+
+$loader->import('config_dev.php');
+
+$container->getExtension('web')->load('config', array(
+    'toolbar' => false,
+), $container);
+
+$container->getExtension('kernel')->load('test', array(
+), $container);

+ 12 - 0
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/routing.php

@@ -0,0 +1,12 @@
+<?php
+
+use Symfony\Components\Routing\RouteCollection;
+use Symfony\Components\Routing\Route;
+
+$collection = new RouteCollection();
+
+$collection->addRoute('homepage', new Route('/', array(
+    '_controller' => 'FrameworkBundle:Default:index',
+)));
+
+return $collection;

+ 0 - 54
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/xml/Kernel.php

@@ -1,54 +0,0 @@
-<?php
-
-require_once __DIR__.'/../src/autoload.php';
-
-use Symfony\Framework\Kernel;
-use Symfony\Components\DependencyInjection\Loader\LoaderInterface;
-
-use Symfony\Framework\Bundle\KernelBundle;
-use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
-use Symfony\Bundle\ZendBundle\ZendBundle;
-use Symfony\Bundle\DoctrineBundle\DoctrineBundle;
-use Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle;
-
-class {{ class }}Kernel extends Kernel
-{
-    public function registerRootDir()
-    {
-        return __DIR__;
-    }
-
-    public function registerBundles()
-    {
-        $bundles = array(
-            new KernelBundle(),
-            new FrameworkBundle(),
-
-            // enable third-party bundles
-            new ZendBundle(),
-            new DoctrineBundle(),
-            new SwiftmailerBundle(),
-
-            // register your bundles here
-        );
-
-        if ($this->isDebug()) {
-        }
-
-        return $bundles;
-    }
-
-    public function registerBundleDirs()
-    {
-        return array(
-            'Application'     => __DIR__.'/../src/Application',
-            'Bundle'          => __DIR__.'/../src/Bundle',
-            'Symfony\\Bundle' => __DIR__.'/../src/vendor/Symfony/src/Symfony/Bundle',
-        );
-    }
-
-    public function registerContainerConfiguration(LoaderInterface $loader)
-    {
-        $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.xml');
-    }
-}

+ 0 - 13
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/Cache.php

@@ -1,13 +0,0 @@
-<?php
-
-require_once __DIR__.'/{{ class }}Kernel.php';
-
-use Symfony\Framework\Cache\Cache;
-
-class {{ class }}Cache extends Cache
-{
-  protected function getOptions()
-  {
-    return array();
-  }
-}

+ 0 - 0
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/cache/.symfony


+ 0 - 11
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/console

@@ -1,11 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-require_once __DIR__.'/{{ class }}Kernel.php';
-
-use Symfony\Bundle\FrameworkBundle\Console\Application;
-
-$kernel = new {{ class }}Kernel('dev', true);
-
-$application = new Application($kernel);
-$application->run();

+ 0 - 0
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/logs/.symfony


+ 0 - 29
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/phpunit.xml.dist

@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit backupGlobals="false"
-         backupStaticAttributes="false"
-         colors="false"
-         convertErrorsToExceptions="true"
-         convertNoticesToExceptions="true"
-         convertWarningsToExceptions="true"
-         processIsolation="true"
-         stopOnFailure="false"
-         syntaxCheck="false"
-         bootstrap="../src/autoload.php"
->
-  <testsuites>
-    <testsuite name="Project Test Suite">
-      <directory>../src/Application/*/Tests</directory>
-    </testsuite>
-  </testsuites>
-
-  <filter>
-    <whitelist>
-      <directory>../src/Application</directory>
-      <exclude>
-        <directory>../src/Application/*/Resources</directory>
-        <directory>../src/Application/*/Tests</directory>
-      </exclude>
-    </whitelist>
-  </filter>
-</phpunit>

src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/config/config.yml → src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yml/config/config.yml


src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/config/config_dev.yml → src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yml/config/config_dev.yml


src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/config/config_prod.yml → src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yml/config/config_prod.yml


src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/config/config_test.yml → src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yml/config/config_test.yml


src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yaml/config/routing.yml → src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yml/config/routing.yml


+ 79 - 0
src/Symfony/Bundle/FrameworkBundle/Tests/Command/InitApplicationCommandTest.php

@@ -0,0 +1,79 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bundle\FrameworkBundle\Tests\Command;
+
+use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
+use Symfony\Bundle\FrameworkBundle\Command\InitApplicationCommand;
+use Symfony\Bundle\FrameworkBundle\Util\Filesystem;
+use Symfony\Components\Console\Tester\CommandTester;
+use Symfony\Components\HttpFoundation\Request;
+
+require_once __DIR__.'/../TestCase.php';
+
+class InitApplicationCommandTest extends TestCase
+{
+    /**
+     * @dataProvider getFormat
+     * @runInSeparateProcess
+     */
+    public function testExecution($format)
+    {
+        $tmpDir = sys_get_temp_dir().'/sf_hello';
+        $filesystem = new Filesystem();
+        $filesystem->remove($tmpDir);
+
+        $tester = new CommandTester(new InitApplicationCommand());
+        $tester->execute(array(
+            'name'     => 'Hello'.$format,
+            'path'     => $tmpDir.'/hello'.$format,
+            'web_path' => $tmpDir.'/web',
+            '--format' => $format,
+        ));
+        $filesystem->mkdirs($tmpDir.'/src');
+        $filesystem->touch($tmpDir.'/src/autoload.php');
+
+        $class = 'Hello'.$format.'Kernel';
+        $file = $tmpDir.'/hello'.$format.'/'.$class.'.php';
+        $this->assertTrue(file_exists($file));
+
+        $content = file_get_contents($file);
+        $content = str_replace(
+            "__DIR__.'/../src/vendor/Symfony/src/Symfony/Bundle'",
+            "'".__DIR__."/../../..'",
+            $content
+        );
+        file_put_contents($file, $content);
+
+        require_once $file;
+
+        $kernel = new $class('dev', true);
+        $response = $kernel->handle(Request::create('/'));
+
+        $this->assertRegExp('/successfully/', $response->getContent());
+
+        $filesystem->remove($tmpDir);
+    }
+
+    public function getFormat()
+    {
+        return array(
+            array('xml'),
+            array('yml'),
+            array('php'),
+        );
+    }
+
+    protected function prepareTemplate(\Text_Template $template)
+    {
+        $template->setFile(__DIR__.'/TestCaseMethod.tpl');
+    }
+}

+ 47 - 0
src/Symfony/Bundle/FrameworkBundle/Tests/Command/TestCaseMethod.tpl

@@ -0,0 +1,47 @@
+<?php
+set_include_path('{include_path}');
+require_once 'PHPUnit/Autoload.php';
+ob_start();
+
+function __phpunit_run_isolated_test()
+{
+    if (!class_exists('{className}')) {
+        require_once '{filename}';
+    }
+
+    $result = new PHPUnit_Framework_TestResult;
+    $result->collectRawCodeCoverageInformation({collectCodeCoverageInformation});
+
+    $test = new {className}('{methodName}', unserialize('{data}'), '{dataName}');
+    $test->setDependencyInput(unserialize('{dependencyInput}'));
+    $test->setInIsolation(TRUE);
+
+    ob_end_clean();
+    ob_start();
+    $test->run($result);
+    $output = ob_get_clean();
+
+    print serialize(
+      array(
+        'testResult'    => $test->getResult(),
+        'numAssertions' => $test->getNumAssertions(),
+        'result'        => $result,
+        'output'        => $output
+      )
+    );
+
+    ob_start();
+}
+
+{globals}
+
+if (isset($GLOBALS['__PHPUNIT_BOOTSTRAP'])) {
+    require_once $GLOBALS['__PHPUNIT_BOOTSTRAP'];
+    unset($GLOBALS['__PHPUNIT_BOOTSTRAP']);
+}
+
+{constants}
+
+__phpunit_run_isolated_test();
+ob_end_clean();
+?>