mirror of
https://github.com/janunger/rheinwerk-video-training.git
synced 2026-02-06 15:15:15 +01:00
Initiale Version
This commit is contained in:
466
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Composer/ScriptHandler.php
vendored
Executable file
466
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Composer/ScriptHandler.php
vendored
Executable file
@@ -0,0 +1,466 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Sensio\Bundle\DistributionBundle\Composer;
|
||||
|
||||
use Symfony\Component\ClassLoader\ClassCollectionLoader;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Symfony\Component\Process\Process;
|
||||
use Symfony\Component\Process\PhpExecutableFinder;
|
||||
use Composer\Script\Event;
|
||||
|
||||
/**
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
*/
|
||||
class ScriptHandler
|
||||
{
|
||||
/**
|
||||
* Composer variables are declared static so that an event could update
|
||||
* a composer.json and set new options, making them immediately available
|
||||
* to forthcoming listeners.
|
||||
*/
|
||||
protected static $options = array(
|
||||
'symfony-app-dir' => 'app',
|
||||
'symfony-web-dir' => 'web',
|
||||
'symfony-assets-install' => 'hard',
|
||||
'symfony-cache-warmup' => false,
|
||||
);
|
||||
|
||||
/**
|
||||
* Asks if the new directory structure should be used, installs the structure if needed.
|
||||
*
|
||||
* @param Event $event
|
||||
*/
|
||||
public static function defineDirectoryStructure(Event $event)
|
||||
{
|
||||
$options = static::getOptions($event);
|
||||
|
||||
if (!getenv('SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE') || !$event->getIO()->askConfirmation('Would you like to use Symfony 3 directory structure? [y/N] ', false)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$rootDir = getcwd();
|
||||
$appDir = $options['symfony-app-dir'];
|
||||
$webDir = $options['symfony-web-dir'];
|
||||
$binDir = static::$options['symfony-bin-dir'] = 'bin';
|
||||
$varDir = static::$options['symfony-var-dir'] = 'var';
|
||||
|
||||
static::updateDirectoryStructure($event, $rootDir, $appDir, $binDir, $varDir, $webDir);
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the bootstrap file.
|
||||
*
|
||||
* The bootstrap file contains PHP file that are always needed by the application.
|
||||
* It speeds up the application bootstrapping.
|
||||
*
|
||||
* @param Event $event
|
||||
*/
|
||||
public static function buildBootstrap(Event $event)
|
||||
{
|
||||
$options = static::getOptions($event);
|
||||
$bootstrapDir = $autoloadDir = $options['symfony-app-dir'];
|
||||
|
||||
if (static::useNewDirectoryStructure($options)) {
|
||||
$bootstrapDir = $options['symfony-var-dir'];
|
||||
if (!static::hasDirectory($event, 'symfony-var-dir', $bootstrapDir, 'build bootstrap file')) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!static::hasDirectory($event, 'symfony-app-dir', $autoloadDir, 'build bootstrap file')) {
|
||||
return;
|
||||
}
|
||||
|
||||
static::executeBuildBootstrap($event, $bootstrapDir, $autoloadDir, $options['process-timeout']);
|
||||
}
|
||||
|
||||
protected static function hasDirectory(Event $event, $configName, $path, $actionName)
|
||||
{
|
||||
if (!is_dir($path)) {
|
||||
$event->getIO()->write(sprintf('The %s (%s) specified in composer.json was not found in %s, can not %s.', $configName, $path, getcwd(), $actionName));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets up deployment target specific features.
|
||||
* Could be custom web server configs, boot command files etc.
|
||||
*
|
||||
* @param Event $event
|
||||
*/
|
||||
public static function prepareDeploymentTarget(Event $event)
|
||||
{
|
||||
static::prepareDeploymentTargetHeroku($event);
|
||||
}
|
||||
|
||||
protected static function prepareDeploymentTargetHeroku(Event $event)
|
||||
{
|
||||
$options = static::getOptions($event);
|
||||
if (($stack = getenv('STACK')) && ($stack == 'cedar' || $stack == 'cedar-14')) {
|
||||
$fs = new Filesystem();
|
||||
if (!$fs->exists('Procfile')) {
|
||||
$event->getIO()->write('Heroku deploy detected; creating default Procfile for "web" dyno');
|
||||
$fs->dumpFile('Procfile', sprintf('web: $(composer config bin-dir)/heroku-php-apache2 %s/', $options['symfony-web-dir']));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the Symfony cache.
|
||||
*
|
||||
* @param Event $event
|
||||
*/
|
||||
public static function clearCache(Event $event)
|
||||
{
|
||||
$options = static::getOptions($event);
|
||||
$consoleDir = static::getConsoleDir($event, 'clear the cache');
|
||||
|
||||
if (null === $consoleDir) {
|
||||
return;
|
||||
}
|
||||
|
||||
$warmup = '';
|
||||
if (!$options['symfony-cache-warmup']) {
|
||||
$warmup = ' --no-warmup';
|
||||
}
|
||||
|
||||
static::executeCommand($event, $consoleDir, 'cache:clear'.$warmup, $options['process-timeout']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Installs the assets under the web root directory.
|
||||
*
|
||||
* For better interoperability, assets are copied instead of symlinked by default.
|
||||
*
|
||||
* Even if symlinks work on Windows, this is only true on Windows Vista and later,
|
||||
* but then, only when running the console with admin rights or when disabling the
|
||||
* strict user permission checks (which can be done on Windows 7 but not on Windows
|
||||
* Vista).
|
||||
*
|
||||
* @param Event $event
|
||||
*/
|
||||
public static function installAssets(Event $event)
|
||||
{
|
||||
$options = static::getOptions($event);
|
||||
$consoleDir = static::getConsoleDir($event, 'install assets');
|
||||
|
||||
if (null === $consoleDir) {
|
||||
return;
|
||||
}
|
||||
|
||||
$webDir = $options['symfony-web-dir'];
|
||||
|
||||
$symlink = '';
|
||||
if ($options['symfony-assets-install'] == 'symlink') {
|
||||
$symlink = '--symlink ';
|
||||
} elseif ($options['symfony-assets-install'] == 'relative') {
|
||||
$symlink = '--symlink --relative ';
|
||||
}
|
||||
|
||||
if (!static::hasDirectory($event, 'symfony-web-dir', $webDir, 'install assets')) {
|
||||
return;
|
||||
}
|
||||
|
||||
static::executeCommand($event, $consoleDir, 'assets:install '.$symlink.escapeshellarg($webDir), $options['process-timeout']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updated the requirements file.
|
||||
*
|
||||
* @param Event $event
|
||||
*/
|
||||
public static function installRequirementsFile(Event $event)
|
||||
{
|
||||
$options = static::getOptions($event);
|
||||
$appDir = $options['symfony-app-dir'];
|
||||
$fs = new Filesystem();
|
||||
|
||||
$newDirectoryStructure = static::useNewDirectoryStructure($options);
|
||||
|
||||
if (!$newDirectoryStructure) {
|
||||
if (!static::hasDirectory($event, 'symfony-app-dir', $appDir, 'install the requirements files')) {
|
||||
return;
|
||||
}
|
||||
$fs->copy(__DIR__.'/../Resources/skeleton/app/SymfonyRequirements.php', $appDir.'/SymfonyRequirements.php', true);
|
||||
$fs->copy(__DIR__.'/../Resources/skeleton/app/check.php', $appDir.'/check.php', true);
|
||||
} else {
|
||||
$binDir = $options['symfony-bin-dir'];
|
||||
$varDir = $options['symfony-var-dir'];
|
||||
if (!static::hasDirectory($event, 'symfony-var-dir', $varDir, 'install the requirements files')) {
|
||||
return;
|
||||
}
|
||||
if (!static::hasDirectory($event, 'symfony-bin-dir', $binDir, 'install the requirements files')) {
|
||||
return;
|
||||
}
|
||||
$fs->copy(__DIR__.'/../Resources/skeleton/app/SymfonyRequirements.php', $varDir.'/SymfonyRequirements.php', true);
|
||||
$fs->copy(__DIR__.'/../Resources/skeleton/app/check.php', $binDir.'/symfony_requirements', true);
|
||||
$fs->remove(array($appDir.'/check.php', $appDir.'/SymfonyRequirements.php', true));
|
||||
|
||||
$fs->dumpFile($binDir.'/symfony_requirements', '#!/usr/bin/env php'."\n".str_replace(".'/SymfonyRequirements.php'", ".'/".$fs->makePathRelative($varDir, $binDir)."SymfonyRequirements.php'", file_get_contents($binDir.'/symfony_requirements')));
|
||||
$fs->chmod($binDir.'/symfony_requirements', 0755);
|
||||
}
|
||||
|
||||
$webDir = $options['symfony-web-dir'];
|
||||
|
||||
// if the user has already removed the config.php file, do nothing
|
||||
// as the file must be removed for production use
|
||||
if ($fs->exists($webDir.'/config.php')) {
|
||||
if (!$newDirectoryStructure) {
|
||||
$fs->copy(__DIR__.'/../Resources/skeleton/web/config.php', $webDir.'/config.php', true);
|
||||
} else {
|
||||
$fs->dumpFile($webDir.'/config.php', str_replace('/../app/SymfonyRequirements.php', '/'.$fs->makePathRelative($varDir, $webDir).'SymfonyRequirements.php', file_get_contents(__DIR__.'/../Resources/skeleton/web/config.php')));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function removeSymfonyStandardFiles(Event $event)
|
||||
{
|
||||
$options = static::getOptions($event);
|
||||
$appDir = $options['symfony-app-dir'];
|
||||
|
||||
if (!is_dir($appDir)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!is_dir($appDir.'/SymfonyStandard')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$fs = new Filesystem();
|
||||
$fs->remove($appDir.'/SymfonyStandard');
|
||||
}
|
||||
|
||||
public static function doBuildBootstrap($bootstrapDir)
|
||||
{
|
||||
$file = $bootstrapDir.'/bootstrap.php.cache';
|
||||
if (file_exists($file)) {
|
||||
unlink($file);
|
||||
}
|
||||
|
||||
$classes = array(
|
||||
'Symfony\\Component\\HttpFoundation\\ParameterBag',
|
||||
'Symfony\\Component\\HttpFoundation\\HeaderBag',
|
||||
'Symfony\\Component\\HttpFoundation\\FileBag',
|
||||
'Symfony\\Component\\HttpFoundation\\ServerBag',
|
||||
'Symfony\\Component\\HttpFoundation\\Request',
|
||||
'Symfony\\Component\\HttpFoundation\\Response',
|
||||
'Symfony\\Component\\HttpFoundation\\ResponseHeaderBag',
|
||||
|
||||
'Symfony\\Component\\DependencyInjection\\ContainerAwareInterface',
|
||||
'Symfony\\Component\\DependencyInjection\\Container',
|
||||
'Symfony\\Component\\HttpKernel\\Kernel',
|
||||
'Symfony\\Component\\ClassLoader\\ClassCollectionLoader',
|
||||
'Symfony\\Component\\ClassLoader\\ApcClassLoader',
|
||||
'Symfony\\Component\\HttpKernel\\Bundle\\Bundle',
|
||||
'Symfony\\Component\\Config\\ConfigCache',
|
||||
// cannot be included as commands are discovered based on the path to this class via Reflection
|
||||
//'Symfony\\Bundle\\FrameworkBundle\\FrameworkBundle',
|
||||
);
|
||||
|
||||
// introspect the autoloader to get the right file
|
||||
// we cannot use class_exist() here as it would load the class
|
||||
// which won't be included into the cache then.
|
||||
// we know that composer autoloader is first (see bin/build_bootstrap.php)
|
||||
$autoloaders = spl_autoload_functions();
|
||||
if (is_array($autoloaders[0]) && method_exists($autoloaders[0][0], 'findFile') && $autoloaders[0][0]->findFile('Symfony\\Component\\HttpKernel\\DependencyInjection\\ContainerAwareHttpKernel')) {
|
||||
$classes[] = 'Symfony\\Component\\HttpKernel\\DependencyInjection\\ContainerAwareHttpKernel';
|
||||
} else {
|
||||
$classes[] = 'Symfony\\Component\\HttpKernel\\HttpKernel';
|
||||
}
|
||||
|
||||
ClassCollectionLoader::load($classes, dirname($file), basename($file, '.php.cache'), false, false, '.php.cache');
|
||||
|
||||
$bootstrapContent = substr(file_get_contents($file), 5);
|
||||
|
||||
file_put_contents($file, sprintf(<<<'EOF'
|
||||
<?php
|
||||
|
||||
%s
|
||||
|
||||
EOF
|
||||
, $bootstrapContent));
|
||||
}
|
||||
|
||||
protected static function executeCommand(Event $event, $consoleDir, $cmd, $timeout = 300)
|
||||
{
|
||||
$php = escapeshellarg(static::getPhp(false));
|
||||
$phpArgs = implode(' ', array_map('escapeshellarg', static::getPhpArguments()));
|
||||
$console = escapeshellarg($consoleDir.'/console');
|
||||
if ($event->getIO()->isDecorated()) {
|
||||
$console .= ' --ansi';
|
||||
}
|
||||
|
||||
$process = new Process($php.($phpArgs ? ' '.$phpArgs : '').' '.$console.' '.$cmd, null, null, null, $timeout);
|
||||
$process->run(function ($type, $buffer) use ($event) { $event->getIO()->write($buffer, false); });
|
||||
if (!$process->isSuccessful()) {
|
||||
throw new \RuntimeException(sprintf("An error occurred when executing the \"%s\" command:\n\n%s\n\n%s.", escapeshellarg($cmd), $process->getOutput(), $process->getErrorOutput()));
|
||||
}
|
||||
}
|
||||
|
||||
protected static function executeBuildBootstrap(Event $event, $bootstrapDir, $autoloadDir, $timeout = 300)
|
||||
{
|
||||
$php = escapeshellarg(static::getPhp(false));
|
||||
$phpArgs = implode(' ', array_map('escapeshellarg', static::getPhpArguments()));
|
||||
$cmd = escapeshellarg(__DIR__.'/../Resources/bin/build_bootstrap.php');
|
||||
$bootstrapDir = escapeshellarg($bootstrapDir);
|
||||
$autoloadDir = escapeshellarg($autoloadDir);
|
||||
$useNewDirectoryStructure = '';
|
||||
if (static::useNewDirectoryStructure(static::getOptions($event))) {
|
||||
$useNewDirectoryStructure = escapeshellarg('--use-new-directory-structure');
|
||||
}
|
||||
|
||||
$process = new Process($php.($phpArgs ? ' '.$phpArgs : '').' '.$cmd.' '.$bootstrapDir.' '.$autoloadDir.' '.$useNewDirectoryStructure, getcwd(), null, null, $timeout);
|
||||
$process->run(function ($type, $buffer) use ($event) { $event->getIO()->write($buffer, false); });
|
||||
if (!$process->isSuccessful()) {
|
||||
throw new \RuntimeException('An error occurred when generating the bootstrap file.');
|
||||
}
|
||||
}
|
||||
|
||||
protected static function updateDirectoryStructure(Event $event, $rootDir, $appDir, $binDir, $varDir, $webDir)
|
||||
{
|
||||
$event->getIO()->write('Updating Symfony directory structure...');
|
||||
|
||||
$fs = new Filesystem();
|
||||
|
||||
$fs->mkdir(array($binDir, $varDir));
|
||||
|
||||
foreach (array(
|
||||
$appDir.'/console' => $binDir.'/console',
|
||||
$appDir.'/phpunit.xml.dist' => $rootDir.'/phpunit.xml.dist',
|
||||
) as $source => $target) {
|
||||
$fs->rename($source, $target, true);
|
||||
}
|
||||
|
||||
foreach (array('/logs', '/cache') as $dir) {
|
||||
$fs->rename($appDir.$dir, $varDir.$dir);
|
||||
}
|
||||
|
||||
$gitignore = <<<EOF
|
||||
/web/bundles/
|
||||
/app/config/parameters.yml
|
||||
/var/bootstrap.php.cache
|
||||
/var/SymfonyRequirements.php
|
||||
/var/cache/*
|
||||
/var/logs/*
|
||||
!var/cache/.gitkeep
|
||||
!var/logs/.gitkeep
|
||||
/build/
|
||||
/vendor/
|
||||
/bin/*
|
||||
!bin/console
|
||||
!bin/symfony_requirements
|
||||
/composer.phar
|
||||
EOF;
|
||||
$phpunitKernelBefore = <<<EOF
|
||||
<!--
|
||||
<php>
|
||||
<server name="KERNEL_DIR" value="/path/to/your/app/" />
|
||||
</php>
|
||||
-->
|
||||
EOF;
|
||||
$phpunitKernelAfter = <<<EOF
|
||||
<php>
|
||||
<server name="KERNEL_DIR" value="$appDir/" />
|
||||
</php>
|
||||
EOF;
|
||||
$phpunit = str_replace(array('<directory>../src', '"bootstrap.php.cache"', $phpunitKernelBefore), array('<directory>src', '"'.$varDir.'/bootstrap.php.cache"', $phpunitKernelAfter), file_get_contents($rootDir.'/phpunit.xml.dist'));
|
||||
$composer = str_replace('"symfony-app-dir": "app",', "\"symfony-app-dir\": \"app\",\n \"symfony-bin-dir\": \"bin\",\n \"symfony-var-dir\": \"var\",", file_get_contents($rootDir.'/composer.json'));
|
||||
|
||||
$fs->dumpFile($webDir.'/app.php', str_replace($appDir.'/bootstrap.php.cache', $varDir.'/bootstrap.php.cache', file_get_contents($webDir.'/app.php')));
|
||||
$fs->dumpFile($webDir.'/app_dev.php', str_replace($appDir.'/bootstrap.php.cache', $varDir.'/bootstrap.php.cache', file_get_contents($webDir.'/app_dev.php')));
|
||||
$fs->dumpFile($binDir.'/console', str_replace(array(".'/bootstrap.php.cache'", ".'/AppKernel.php'"), array(".'/".$fs->makePathRelative($varDir, $binDir)."bootstrap.php.cache'", ".'/".$fs->makePathRelative($appDir, $binDir)."AppKernel.php'"), file_get_contents($binDir.'/console')));
|
||||
$fs->dumpFile($rootDir.'/phpunit.xml.dist', $phpunit);
|
||||
$fs->dumpFile($rootDir.'/composer.json', $composer);
|
||||
|
||||
$fs->dumpFile($rootDir.'/.gitignore', $gitignore);
|
||||
|
||||
$fs->chmod($binDir.'/console', 0755);
|
||||
}
|
||||
|
||||
protected static function getOptions(Event $event)
|
||||
{
|
||||
$options = array_merge(static::$options, $event->getComposer()->getPackage()->getExtra());
|
||||
|
||||
$options['symfony-assets-install'] = getenv('SYMFONY_ASSETS_INSTALL') ?: $options['symfony-assets-install'];
|
||||
|
||||
$options['process-timeout'] = $event->getComposer()->getConfig()->get('process-timeout');
|
||||
|
||||
return $options;
|
||||
}
|
||||
|
||||
protected static function getPhp($includeArgs = true)
|
||||
{
|
||||
$phpFinder = new PhpExecutableFinder();
|
||||
if (!$phpPath = $phpFinder->find($includeArgs)) {
|
||||
throw new \RuntimeException('The php executable could not be found, add it to your PATH environment variable and try again');
|
||||
}
|
||||
|
||||
return $phpPath;
|
||||
}
|
||||
|
||||
protected static function getPhpArguments()
|
||||
{
|
||||
$arguments = array();
|
||||
|
||||
$phpFinder = new PhpExecutableFinder();
|
||||
if (method_exists($phpFinder, 'findArguments')) {
|
||||
$arguments = $phpFinder->findArguments();
|
||||
}
|
||||
|
||||
if (false !== $ini = php_ini_loaded_file()) {
|
||||
$arguments[] = '--php-ini='.$ini;
|
||||
}
|
||||
|
||||
return $arguments;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a relative path to the directory that contains the `console` command.
|
||||
*
|
||||
* @param Event $event The command event.
|
||||
* @param string $actionName The name of the action
|
||||
*
|
||||
* @return string|null The path to the console directory, null if not found.
|
||||
*/
|
||||
protected static function getConsoleDir(Event $event, $actionName)
|
||||
{
|
||||
$options = static::getOptions($event);
|
||||
|
||||
if (static::useNewDirectoryStructure($options)) {
|
||||
if (!static::hasDirectory($event, 'symfony-bin-dir', $options['symfony-bin-dir'], $actionName)) {
|
||||
return;
|
||||
}
|
||||
|
||||
return $options['symfony-bin-dir'];
|
||||
}
|
||||
|
||||
if (!static::hasDirectory($event, 'symfony-app-dir', $options['symfony-app-dir'], 'execute command')) {
|
||||
return;
|
||||
}
|
||||
|
||||
return $options['symfony-app-dir'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the new directory structure is used.
|
||||
*
|
||||
* @param array $options Composer options
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected static function useNewDirectoryStructure(array $options)
|
||||
{
|
||||
return isset($options['symfony-var-dir']) && is_dir($options['symfony-var-dir']);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace Sensio\Bundle\DistributionBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
|
||||
/**
|
||||
* SensioDistributionExtension.
|
||||
*
|
||||
* @author Marc Weistroff <marc.weistroff@sensio.com>
|
||||
*/
|
||||
class SensioDistributionExtension extends Extension
|
||||
{
|
||||
public function load(array $configs, ContainerBuilder $container)
|
||||
{
|
||||
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
|
||||
|
||||
$loader->load('security.xml');
|
||||
}
|
||||
|
||||
public function getNamespace()
|
||||
{
|
||||
return 'http://symfony.com/schema/dic/symfony/sensiodistribution';
|
||||
}
|
||||
|
||||
public function getAlias()
|
||||
{
|
||||
return 'sensio_distribution';
|
||||
}
|
||||
}
|
||||
19
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/LICENSE
vendored
Executable file
19
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/LICENSE
vendored
Executable file
@@ -0,0 +1,19 @@
|
||||
Copyright (c) 2010,2013 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.
|
||||
27
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/README.rst
vendored
Executable file
27
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/README.rst
vendored
Executable file
@@ -0,0 +1,27 @@
|
||||
SensioDistributionBundle
|
||||
========================
|
||||
|
||||
SensioDistributionBundle provides useful developer features that can be re-used
|
||||
amongst several Symfony Distributions.
|
||||
|
||||
Composer Hooks
|
||||
--------------
|
||||
|
||||
The bundle hooks up into the Composer process to automate the following actions
|
||||
when running an install or an update:
|
||||
|
||||
* Update the ``bootstrap.php.cache`` file (and clears the cache);
|
||||
|
||||
* Install the assets under the web root directory;
|
||||
|
||||
* Update the requirements file.
|
||||
|
||||
Security
|
||||
--------
|
||||
|
||||
The bundle includes the SensioLabs Security Checker. When included in a Symfony
|
||||
application, the check is available:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ ./app/console security:check
|
||||
140
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/bin/build.sh
vendored
Executable file
140
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/bin/build.sh
vendored
Executable file
@@ -0,0 +1,140 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This file is part of the Symfony Standard Edition.
|
||||
#
|
||||
# (c) Fabien Potencier <fabien@symfony.com>
|
||||
#
|
||||
# For the full copyright and license information, please view the LICENSE
|
||||
# file that was distributed with this source code.
|
||||
|
||||
if [ ! $1 ]; then
|
||||
echo "\033[37;41mYou must pass the build dir as an absolute path\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! $2 ]; then
|
||||
echo "\033[37;41mYou must pass the version to build\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DIR=$1
|
||||
CURRENT=`php -r "echo realpath(dirname(\\$_SERVER['argv'][0]));"`
|
||||
|
||||
if [[ ! "$DIR" = /* ]]; then
|
||||
DIR="$CURRENT/$DIR"
|
||||
fi
|
||||
|
||||
if [ ! -d $DIR ]; then
|
||||
echo "\033[37;41mThe build dir does not exist\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# avoid the creation of ._* files
|
||||
export COPY_EXTENDED_ATTRIBUTES_DISABLE=true
|
||||
export COPYFILE_DISABLE=true
|
||||
|
||||
# Temp dir
|
||||
rm -rf /tmp/Symfony
|
||||
mkdir /tmp/Symfony
|
||||
|
||||
# Create project
|
||||
composer create-project --prefer-dist --no-interaction symfony/framework-standard-edition /tmp/Symfony $2
|
||||
|
||||
if [ 0 -ne $? ]; then
|
||||
echo "\033[37;41mVersion $2 does not exist\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd /tmp/Symfony
|
||||
|
||||
# cleanup
|
||||
rm -rf app/cache/* app/logs/* .git*
|
||||
chmod 777 app/cache app/logs
|
||||
find . -name .DS_Store | xargs rm -rf -
|
||||
|
||||
VERSION=`grep ' VERSION ' vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php | sed -E "s/.*'(.+)'.*/\1/g"`
|
||||
|
||||
# With vendors
|
||||
cd /tmp/Symfony
|
||||
TARGET=/tmp/Symfony/vendor
|
||||
|
||||
# Doctrine
|
||||
cd $TARGET/doctrine/orm && rm -rf UPGRADE* build* tests tools lib/vendor
|
||||
cd $TARGET/doctrine/dbal && rm -rf build* tests lib/vendor
|
||||
cd $TARGET/doctrine/common && rm -rf build* tests lib/vendor
|
||||
if [ -d $TARGET/doctrine/doctrine-bundle/Doctrine/Bundle/DoctrineBundle ]; then
|
||||
cd $TARGET/doctrine/doctrine-bundle/Doctrine/Bundle/DoctrineBundle && rm -rf Tests Resources/doc
|
||||
else
|
||||
cd $TARGET/doctrine/doctrine-bundle && rm -rf Tests Resources/doc
|
||||
fi
|
||||
|
||||
# kriswallsmith
|
||||
if [ -d $TARGET/kriswallsmith/assetic ]; then
|
||||
cd $TARGET/kriswallsmith/assetic && rm -rf CHANGELOG* phpunit.xml* tests docs
|
||||
fi
|
||||
|
||||
# Monolog
|
||||
cd $TARGET/monolog/monolog && rm -rf README.markdown phpunit.xml* tests
|
||||
|
||||
# Sensio
|
||||
if [ -d $TARGET/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle ]; then
|
||||
cd $TARGET/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle && rm -rf phpunit.xml* Tests CHANGELOG* Resources/doc
|
||||
else
|
||||
cd $TARGET/sensio/distribution-bundle && rm -rf phpunit.xml* Tests CHANGELOG* Resources/doc
|
||||
fi
|
||||
if [ -d $TARGET/sensio/framework-extra-bundle/Sensio/Bundle/FrameworkExtraBundle ]; then
|
||||
cd $TARGET/sensio/framework-extra-bundle/Sensio/Bundle/FrameworkExtraBundle && rm -rf phpunit.xml* Tests CHANGELOG* Resources/doc
|
||||
else
|
||||
cd $TARGET/sensio/framework-extra-bundle && rm -rf phpunit.xml* Tests CHANGELOG* Resources/doc
|
||||
fi
|
||||
if [ -d $TARGET/sensio/generator-bundle/Sensio/Bundle/GeneratorBundle ]; then
|
||||
cd $TARGET/sensio/generator-bundle/Sensio/Bundle/GeneratorBundle && rm -rf phpunit.xml* Tests CHANGELOG* Resources/doc
|
||||
else
|
||||
cd $TARGET/sensio/generator-bundle && rm -rf phpunit.xml* Tests CHANGELOG* Resources/doc
|
||||
fi
|
||||
|
||||
# Swiftmailer
|
||||
cd $TARGET/swiftmailer/swiftmailer && rm -rf CHANGES README* build* docs notes test-suite tests create_pear_package.php package*
|
||||
|
||||
# Symfony
|
||||
cd $TARGET/symfony/symfony && rm -rf README.md phpunit.xml* tests *.sh vendor
|
||||
|
||||
if [ -d $TARGET/symfony/assetic-bundle/Symfony/Bundle/AsseticBundle ]; then
|
||||
cd $TARGET/symfony/assetic-bundle/Symfony/Bundle/AsseticBundle && rm -rf Tests Resources/doc
|
||||
elif [ -d $TARGET/symfony/assetic-bundle ]; then
|
||||
cd $TARGET/symfony/assetic-bundle && rm -rf Tests Resources/doc
|
||||
fi
|
||||
|
||||
if [ -d $TARGET/symfony/swiftmailer-bundle/Symfony/Bundle/SwiftmailerBundle ]; then
|
||||
cd $TARGET/symfony/swiftmailer-bundle/Symfony/Bundle/SwiftmailerBundle && rm -rf Tests Resources/doc
|
||||
else
|
||||
cd $TARGET/symfony/swiftmailer-bundle && rm -rf Tests Resources/doc
|
||||
fi
|
||||
|
||||
if [ -d $TARGET/symfony/monolog-bundle/Symfony/Bundle/MonologBundle ]; then
|
||||
cd $TARGET/symfony/monolog-bundle/Symfony/Bundle/MonologBundle && rm -rf Tests Resources/doc
|
||||
else
|
||||
cd $TARGET/symfony/monolog-bundle && rm -rf Tests Resources/doc
|
||||
fi
|
||||
|
||||
# Twig
|
||||
cd $TARGET/twig/twig && rm -rf AUTHORS CHANGELOG README.markdown bin doc package.xml.tpl phpunit.xml* test
|
||||
|
||||
# cleanup
|
||||
find $TARGET -name .git | xargs rm -rf -
|
||||
find $TARGET -name .gitignore | xargs rm -rf -
|
||||
find $TARGET -name .gitmodules | xargs rm -rf -
|
||||
find $TARGET -name .svn | xargs rm -rf -
|
||||
|
||||
# With vendors
|
||||
cd /tmp
|
||||
tar zcpf $DIR/Symfony_Standard_Vendors_$VERSION.tgz Symfony
|
||||
rm -f $DIR/Symfony_Standard_Vendors_$VERSION.zip
|
||||
zip -rq $DIR/Symfony_Standard_Vendors_$VERSION.zip Symfony
|
||||
|
||||
# Without vendors
|
||||
cd /tmp
|
||||
rm -rf Symfony/vendor
|
||||
tar zcpf $DIR/Symfony_Standard_$VERSION.tgz Symfony
|
||||
rm -f $DIR/Symfony_Standard_$VERSION.zip
|
||||
zip -rq $DIR/Symfony_Standard_$VERSION.zip Symfony
|
||||
59
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/bin/build_bootstrap.php
vendored
Executable file
59
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/bin/build_bootstrap.php
vendored
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony Standard Edition.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
use Sensio\Bundle\DistributionBundle\Composer\ScriptHandler;
|
||||
|
||||
if (PHP_SAPI !== 'cli') {
|
||||
echo 'Warning: '.__FILE__.' should be invoked via the CLI version of PHP, not the '.PHP_SAPI.' SAPI'.PHP_EOL;
|
||||
}
|
||||
|
||||
function getRealpath($path, $message = 'Directory %s does not seem to be valid.')
|
||||
{
|
||||
if (!$path = realpath($path)) {
|
||||
exit(sprintf($message, $path));
|
||||
}
|
||||
|
||||
return $path;
|
||||
}
|
||||
|
||||
$argv = $_SERVER['argv'];
|
||||
$autoloadDir = $bootstrapDir = null;
|
||||
$useNewDirectoryStructure = false;
|
||||
|
||||
// allow the base path to be passed as the first argument, or default
|
||||
if (!empty($argv[1])) {
|
||||
$bootstrapDir = getRealpath($argv[1]);
|
||||
}
|
||||
|
||||
if (!empty($argv[2])) {
|
||||
$autoloadDir = getRealpath($argv[2]);
|
||||
}
|
||||
|
||||
if (!empty($argv[3])) {
|
||||
$useNewDirectoryStructure = true;
|
||||
}
|
||||
|
||||
$rootDir = __DIR__.'/../../../../..';
|
||||
if (null === $autoloadDir) {
|
||||
$autoloadDir = getRealpath($rootDir.'/app', 'Looks like you don\'t have a standard layout.');
|
||||
}
|
||||
if (null === $bootstrapDir) {
|
||||
$bootstrapDir = $autoloadDir;
|
||||
if ($useNewDirectoryStructure) {
|
||||
$bootstrapDir = getRealpath($rootDir.'/var');
|
||||
}
|
||||
}
|
||||
|
||||
require_once $autoloadDir.'/autoload.php';
|
||||
|
||||
// here we pass realpaths as resolution between absolute and relative path can be wrong
|
||||
ScriptHandler::doBuildBootstrap($bootstrapDir);
|
||||
112
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/bin/build_demo.sh
vendored
Executable file
112
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/bin/build_demo.sh
vendored
Executable file
@@ -0,0 +1,112 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This file is part of the Symfony Standard Edition.
|
||||
#
|
||||
# (c) Fabien Potencier <fabien@symfony.com>
|
||||
#
|
||||
# For the full copyright and license information, please view the LICENSE
|
||||
# file that was distributed with this source code.
|
||||
|
||||
if [ ! $1 ]; then
|
||||
echo "\033[37;41mYou must pass the build dir as an absolute path\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DIR=$1
|
||||
CURRENT=`php -r "echo realpath(dirname(\\$_SERVER['argv'][0]));"`
|
||||
|
||||
if [[ ! "$DIR" = /* ]]; then
|
||||
DIR="$CURRENT/$DIR"
|
||||
fi
|
||||
|
||||
if [ ! -d $DIR ]; then
|
||||
echo "\033[37;41mThe build dir does not exist\033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# avoid the creation of ._* files
|
||||
export COPY_EXTENDED_ATTRIBUTES_DISABLE=true
|
||||
export COPYFILE_DISABLE=true
|
||||
|
||||
# Prepare temp. dir
|
||||
rm -rf /tmp/Symfony
|
||||
mkdir /tmp/Symfony
|
||||
|
||||
# Clone demo application and install its dependencies
|
||||
git clone https://github.com/symfony/symfony-demo /tmp/Symfony
|
||||
cd /tmp/Symfony
|
||||
composer install --prefer-dist --no-interaction --ignore-platform-reqs --no-plugins --optimize-autoloader
|
||||
|
||||
# cleanup
|
||||
cd /tmp/Symfony
|
||||
rm -f UPGRADE*
|
||||
mv .gitignore keep.gitignore
|
||||
rm -rf app/cache/* app/logs/* .git*
|
||||
mv keep.gitignore .gitignore
|
||||
chmod 777 app/cache app/logs
|
||||
find . -name .DS_Store | xargs rm -rf -
|
||||
|
||||
# remove unneded dependencies files
|
||||
cd /tmp/Symfony
|
||||
TARGET=/tmp/Symfony/vendor
|
||||
|
||||
# Doctrine
|
||||
cd $TARGET/doctrine/orm && rm -rf UPGRADE* build* bin tests tools lib/vendor
|
||||
cd $TARGET/doctrine/dbal && rm -rf bin build* tests lib/vendor
|
||||
cd $TARGET/doctrine/common && rm -rf build* tests lib/vendor
|
||||
if [ -d $TARGET/doctrine/doctrine-bundle/Doctrine/Bundle/DoctrineBundle ]; then
|
||||
cd $TARGET/doctrine/doctrine-bundle/Doctrine/Bundle/DoctrineBundle && rm -rf Tests Resources/doc
|
||||
else
|
||||
cd $TARGET/doctrine/doctrine-bundle && rm -rf Tests Resources/doc
|
||||
fi
|
||||
|
||||
# kriswallsmith
|
||||
cd $TARGET/kriswallsmith/assetic && rm -rf CHANGELOG* phpunit.xml* tests docs
|
||||
|
||||
# Monolog
|
||||
cd $TARGET/monolog/monolog && rm -rf README.markdown phpunit.xml* tests
|
||||
|
||||
# Sensio
|
||||
cd $TARGET/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle && rm -rf phpunit.xml* Tests CHANGELOG* Resources/doc
|
||||
cd $TARGET/sensio/framework-extra-bundle/Sensio/Bundle/FrameworkExtraBundle && rm -rf phpunit.xml* Tests CHANGELOG* Resources/doc
|
||||
cd $TARGET/sensio/generator-bundle/Sensio/Bundle/GeneratorBundle && rm -rf phpunit.xml* Tests CHANGELOG* Resources/doc
|
||||
|
||||
# Swiftmailer
|
||||
cd $TARGET/swiftmailer/swiftmailer && rm -rf CHANGES README* build* docs notes test-suite tests create_pear_package.php package*
|
||||
|
||||
# Symfony
|
||||
cd $TARGET/symfony/symfony && rm -rf README.md phpunit.xml* tests *.sh vendor
|
||||
|
||||
if [ -d $TARGET/symfony/assetic-bundle/Symfony/Bundle/AsseticBundle ]; then
|
||||
cd $TARGET/symfony/assetic-bundle/Symfony/Bundle/AsseticBundle && rm -rf Tests Resources/doc
|
||||
else
|
||||
cd $TARGET/symfony/assetic-bundle && rm -rf Tests Resources/doc
|
||||
fi
|
||||
|
||||
if [ -d $TARGET/symfony/swiftmailer-bundle/Symfony/Bundle/SwiftmailerBundle ]; then
|
||||
cd $TARGET/symfony/swiftmailer-bundle/Symfony/Bundle/SwiftmailerBundle && rm -rf Tests Resources/doc
|
||||
else
|
||||
cd $TARGET/symfony/swiftmailer-bundle && rm -rf Tests Resources/doc
|
||||
fi
|
||||
|
||||
if [ -d $TARGET/symfony/monolog-bundle/Symfony/Bundle/MonologBundle ]; then
|
||||
cd $TARGET/symfony/monolog-bundle/Symfony/Bundle/MonologBundle && rm -rf Tests Resources/doc
|
||||
else
|
||||
cd $TARGET/symfony/monolog-bundle && rm -rf Tests Resources/doc
|
||||
fi
|
||||
|
||||
# Twig
|
||||
cd $TARGET/twig/twig && rm -rf AUTHORS CHANGELOG README.markdown bin doc package.xml.tpl phpunit.xml* test
|
||||
cd $TARGET/twig/extensions && rm -rf README doc phpunit.xml* test
|
||||
|
||||
# final cleanup
|
||||
find $TARGET -name .git | xargs rm -rf -
|
||||
find $TARGET -name .gitignore | xargs rm -rf -
|
||||
find $TARGET -name .gitmodules | xargs rm -rf -
|
||||
find $TARGET -name .svn | xargs rm -rf -
|
||||
|
||||
# build ZIP and TGZ packages
|
||||
cd /tmp
|
||||
tar zcpf $DIR/Symfony_Demo.tgz Symfony
|
||||
rm -f $DIR/Symfony_Demo.zip
|
||||
zip -rq $DIR/Symfony_Demo.zip Symfony
|
||||
15
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/config/security.xml
vendored
Executable file
15
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/config/security.xml
vendored
Executable file
@@ -0,0 +1,15 @@
|
||||
<?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="sensio_distribution.security_checker" class="SensioLabs\Security\SecurityChecker" />
|
||||
|
||||
<service id="sensio_distribution.security_checker.command" class="SensioLabs\Security\Command\SecurityCheckerCommand">
|
||||
<argument type="service" id="sensio_distribution.security_checker" />
|
||||
<tag name="console.command" />
|
||||
</service>
|
||||
</services>
|
||||
</container>
|
||||
774
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/skeleton/app/SymfonyRequirements.php
vendored
Executable file
774
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/skeleton/app/SymfonyRequirements.php
vendored
Executable file
@@ -0,0 +1,774 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* 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 overridden 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 <http://tobion.de>
|
||||
*/
|
||||
class Requirement
|
||||
{
|
||||
private $fulfilled;
|
||||
private $testMessage;
|
||||
private $helpText;
|
||||
private $helpHtml;
|
||||
private $optional;
|
||||
|
||||
/**
|
||||
* Constructor that initializes the requirement.
|
||||
*
|
||||
* @param bool $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 bool $optional Whether this is only an optional recommendation not a mandatory requirement
|
||||
*/
|
||||
public function __construct($fulfilled, $testMessage, $helpHtml, $helpText = null, $optional = false)
|
||||
{
|
||||
$this->fulfilled = (bool) $fulfilled;
|
||||
$this->testMessage = (string) $testMessage;
|
||||
$this->helpHtml = (string) $helpHtml;
|
||||
$this->helpText = null === $helpText ? strip_tags($this->helpHtml) : (string) $helpText;
|
||||
$this->optional = (bool) $optional;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the requirement is fulfilled.
|
||||
*
|
||||
* @return bool 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 bool 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 <http://tobion.de>
|
||||
*/
|
||||
class PhpIniRequirement extends Requirement
|
||||
{
|
||||
/**
|
||||
* Constructor that initializes the requirement.
|
||||
*
|
||||
* @param string $cfgName The configuration name used for ini_get()
|
||||
* @param bool|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 bool $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 bool $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 <strong>%s</strong> to <strong>%s</strong> in php.ini<a href="#phpini">*</a>.',
|
||||
$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 <http://tobion.de>
|
||||
*/
|
||||
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 bool $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 bool $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 bool|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 bool $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 bool|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 bool $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 recommendations.
|
||||
*
|
||||
* @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 bool 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 <http://tobion.de>
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
*/
|
||||
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 "<strong>%s</strong>", but Symfony needs at least PHP "<strong>%s</strong>" 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 <a href="http://getcomposer.org/">http://getcomposer.org/</a>. '.
|
||||
'Then run "<strong>php composer.phar install</strong>" to install them.'
|
||||
);
|
||||
|
||||
$cacheDir = is_dir(__DIR__.'/../var/cache') ? __DIR__.'/../var/cache' : __DIR__.'/cache';
|
||||
|
||||
$this->addRequirement(
|
||||
is_writable($cacheDir),
|
||||
'app/cache/ or var/cache/ directory must be writable',
|
||||
'Change the permissions of either "<strong>app/cache/</strong>" or "<strong>var/cache/</strong>" directory so that the web server can write into it.'
|
||||
);
|
||||
|
||||
$logsDir = is_dir(__DIR__.'/../var/logs') ? __DIR__.'/../var/logs' : __DIR__.'/logs';
|
||||
|
||||
$this->addRequirement(
|
||||
is_writable($logsDir),
|
||||
'app/logs/ or var/logs/ directory must be writable',
|
||||
'Change the permissions of either "<strong>app/logs/</strong>" or "<strong>var/logs/</strong>" directory so that the web server can write into it.'
|
||||
);
|
||||
|
||||
if (version_compare($installedPhpVersion, '7.0.0', '<')) {
|
||||
$this->addPhpIniRequirement(
|
||||
'date.timezone', true, false,
|
||||
'date.timezone setting must be set',
|
||||
'Set the "<strong>date.timezone</strong>" setting in php.ini<a href="#phpini">*</a> (like Europe/Paris).'
|
||||
);
|
||||
}
|
||||
|
||||
if (version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>=')) {
|
||||
$timezones = array();
|
||||
foreach (DateTimeZone::listAbbreviations() as $abbreviations) {
|
||||
foreach ($abbreviations as $abbreviation) {
|
||||
$timezones[$abbreviation['timezone_id']] = true;
|
||||
}
|
||||
}
|
||||
|
||||
$this->addRequirement(
|
||||
isset($timezones[@date_default_timezone_get()]),
|
||||
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 <strong>php.ini</strong> file and have a look at the list of deprecated timezones at <a href="http://php.net/manual/en/timezones.others.php">http://php.net/manual/en/timezones.others.php</a>.'
|
||||
);
|
||||
}
|
||||
|
||||
$this->addRequirement(
|
||||
function_exists('iconv'),
|
||||
'iconv() must be available',
|
||||
'Install and enable the <strong>iconv</strong> extension.'
|
||||
);
|
||||
|
||||
$this->addRequirement(
|
||||
function_exists('json_encode'),
|
||||
'json_encode() must be available',
|
||||
'Install and enable the <strong>JSON</strong> extension.'
|
||||
);
|
||||
|
||||
$this->addRequirement(
|
||||
function_exists('session_start'),
|
||||
'session_start() must be available',
|
||||
'Install and enable the <strong>session</strong> extension.'
|
||||
);
|
||||
|
||||
$this->addRequirement(
|
||||
function_exists('ctype_alpha'),
|
||||
'ctype_alpha() must be available',
|
||||
'Install and enable the <strong>ctype</strong> extension.'
|
||||
);
|
||||
|
||||
$this->addRequirement(
|
||||
function_exists('token_get_all'),
|
||||
'token_get_all() must be available',
|
||||
'Install and enable the <strong>Tokenizer</strong> extension.'
|
||||
);
|
||||
|
||||
$this->addRequirement(
|
||||
function_exists('simplexml_import_dom'),
|
||||
'simplexml_import_dom() must be available',
|
||||
'Install and enable the <strong>SimpleXML</strong> extension.'
|
||||
);
|
||||
|
||||
if (function_exists('apc_store') && ini_get('apc.enabled')) {
|
||||
if (version_compare($installedPhpVersion, '5.4.0', '>=')) {
|
||||
$this->addRequirement(
|
||||
version_compare(phpversion('apc'), '3.1.13', '>='),
|
||||
'APC version must be at least 3.1.13 when using PHP 5.4',
|
||||
'Upgrade your <strong>APC</strong> extension (3.1.13+).'
|
||||
);
|
||||
} else {
|
||||
$this->addRequirement(
|
||||
version_compare(phpversion('apc'), '3.0.17', '>='),
|
||||
'APC version must be at least 3.0.17',
|
||||
'Upgrade your <strong>APC</strong> 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 "<strong>phar</strong>" to <strong>suhosin.executor.include.whitelist</strong> in php.ini<a href="#phpini">*</a>.'
|
||||
);
|
||||
}
|
||||
|
||||
if (extension_loaded('xdebug')) {
|
||||
$this->addPhpIniRequirement(
|
||||
'xdebug.show_exception_trace', false, true
|
||||
);
|
||||
|
||||
$this->addPhpIniRequirement(
|
||||
'xdebug.scream', false, true
|
||||
);
|
||||
|
||||
$this->addPhpIniRecommendation(
|
||||
'xdebug.max_nesting_level',
|
||||
create_function('$cfgValue', 'return $cfgValue > 100;'),
|
||||
true,
|
||||
'xdebug.max_nesting_level should be above 100 in php.ini',
|
||||
'Set "<strong>xdebug.max_nesting_level</strong>" to e.g. "<strong>250</strong>" in php.ini<a href="#phpini">*</a> to stop Xdebug\'s infinite recursion protection erroneously throwing a fatal error in your project.'
|
||||
);
|
||||
}
|
||||
|
||||
$pcreVersion = defined('PCRE_VERSION') ? (float) PCRE_VERSION : null;
|
||||
|
||||
$this->addRequirement(
|
||||
null !== $pcreVersion,
|
||||
'PCRE extension must be available',
|
||||
'Install the <strong>PCRE</strong> extension (version 8.0+).'
|
||||
);
|
||||
|
||||
if (extension_loaded('mbstring')) {
|
||||
$this->addPhpIniRequirement(
|
||||
'mbstring.func_overload',
|
||||
create_function('$cfgValue', 'return (int) $cfgValue === 0;'),
|
||||
true,
|
||||
'string functions should not be overloaded',
|
||||
'Set "<strong>mbstring.func_overload</strong>" to <strong>0</strong> in php.ini<a href="#phpini">*</a> to disable function overloading by the mbstring extension.'
|
||||
);
|
||||
}
|
||||
|
||||
/* optional recommendations follow */
|
||||
|
||||
if (file_exists(__DIR__.'/../vendor/composer')) {
|
||||
require_once __DIR__.'/../vendor/autoload.php';
|
||||
|
||||
try {
|
||||
$r = new ReflectionClass('Sensio\Bundle\DistributionBundle\SensioDistributionBundle');
|
||||
|
||||
$contents = file_get_contents(dirname($r->getFileName()).'/Resources/skeleton/app/SymfonyRequirements.php');
|
||||
} catch (ReflectionException $e) {
|
||||
$contents = '';
|
||||
}
|
||||
$this->addRecommendation(
|
||||
file_get_contents(__FILE__) === $contents,
|
||||
'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(
|
||||
version_compare($installedPhpVersion, '5.4.11', '>='),
|
||||
'When using the logout handler from the Symfony Security Component, you should have at least PHP 5.4.11 due to PHP bug #63379 (as a workaround, you can also set invalidate_session to false in the security logout handler configuration)',
|
||||
'Install PHP 5.4.11 or newer if your project uses the logout handler from the Symfony Security Component.'
|
||||
);
|
||||
|
||||
$this->addRecommendation(
|
||||
(version_compare($installedPhpVersion, '5.3.18', '>=') && version_compare($installedPhpVersion, '5.4.0', '<'))
|
||||
||
|
||||
version_compare($installedPhpVersion, '5.4.8', '>='),
|
||||
'You should use PHP 5.3.18+ or PHP 5.4.8+ to always get nice error messages for fatal errors in the development environment due to PHP bug #61767/#60909',
|
||||
'Install PHP 5.3.18+ or PHP 5.4.8+ if you want nice error messages for all fatal errors in the development environment.'
|
||||
);
|
||||
|
||||
if (null !== $pcreVersion) {
|
||||
$this->addRecommendation(
|
||||
$pcreVersion >= 8.0,
|
||||
sprintf('PCRE extension should be at least version 8.0 (%s installed)', $pcreVersion),
|
||||
'<strong>PCRE 8.0+</strong> is preconfigured in PHP since 5.3.2 but you are using an outdated version of it. Symfony probably works anyway but it is recommended to upgrade your PCRE extension.'
|
||||
);
|
||||
}
|
||||
|
||||
$this->addRecommendation(
|
||||
class_exists('DomDocument'),
|
||||
'PHP-DOM and PHP-XML modules should be installed',
|
||||
'Install and enable the <strong>PHP-DOM</strong> and the <strong>PHP-XML</strong> modules.'
|
||||
);
|
||||
|
||||
$this->addRecommendation(
|
||||
function_exists('mb_strlen'),
|
||||
'mb_strlen() should be available',
|
||||
'Install and enable the <strong>mbstring</strong> extension.'
|
||||
);
|
||||
|
||||
$this->addRecommendation(
|
||||
function_exists('iconv'),
|
||||
'iconv() should be available',
|
||||
'Install and enable the <strong>iconv</strong> extension.'
|
||||
);
|
||||
|
||||
$this->addRecommendation(
|
||||
function_exists('utf8_decode'),
|
||||
'utf8_decode() should be available',
|
||||
'Install and enable the <strong>XML</strong> extension.'
|
||||
);
|
||||
|
||||
$this->addRecommendation(
|
||||
function_exists('filter_var'),
|
||||
'filter_var() should be available',
|
||||
'Install and enable the <strong>filter</strong> extension.'
|
||||
);
|
||||
|
||||
if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
|
||||
$this->addRecommendation(
|
||||
function_exists('posix_isatty'),
|
||||
'posix_isatty() should be available',
|
||||
'Install and enable the <strong>php_posix</strong> extension (used to colorize the CLI output).'
|
||||
);
|
||||
}
|
||||
|
||||
$this->addRecommendation(
|
||||
extension_loaded('intl'),
|
||||
'intl extension should be available',
|
||||
'Install and enable the <strong>intl</strong> extension (used for validators).'
|
||||
);
|
||||
|
||||
if (extension_loaded('intl')) {
|
||||
// in some WAMP server installations, new Collator() returns null
|
||||
$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.'
|
||||
);
|
||||
|
||||
// check for compatible ICU versions (only done when you have the intl extension)
|
||||
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 <strong>intl</strong> extension with a newer ICU version (4+).'
|
||||
);
|
||||
|
||||
if (class_exists('Symfony\Component\Intl\Intl')) {
|
||||
$this->addRecommendation(
|
||||
\Symfony\Component\Intl\Intl::getIcuDataVersion() === \Symfony\Component\Intl\Intl::getIcuVersion(),
|
||||
sprintf('intl ICU version installed on your system (%s) should match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()),
|
||||
'In most cases you should be fine, but please verify there is no inconsistencies between data provided by Symfony and the intl extension. See https://github.com/symfony/symfony/issues/15007 for an example of inconsistencies you might run into.'
|
||||
);
|
||||
}
|
||||
|
||||
$this->addPhpIniRecommendation(
|
||||
'intl.error_level',
|
||||
create_function('$cfgValue', 'return (int) $cfgValue === 0;'),
|
||||
true,
|
||||
'intl.error_level should be 0 in php.ini',
|
||||
'Set "<strong>intl.error_level</strong>" to "<strong>0</strong>" in php.ini<a href="#phpini">*</a> to inhibit the messages when an error occurs in ICU functions.'
|
||||
);
|
||||
}
|
||||
|
||||
$accelerator =
|
||||
(extension_loaded('eaccelerator') && ini_get('eaccelerator.enable'))
|
||||
||
|
||||
(extension_loaded('apc') && ini_get('apc.enabled'))
|
||||
||
|
||||
(extension_loaded('Zend Optimizer+') && ini_get('zend_optimizerplus.enable'))
|
||||
||
|
||||
(extension_loaded('Zend OPcache') && ini_get('opcache.enable'))
|
||||
||
|
||||
(extension_loaded('xcache') && ini_get('xcache.cacher'))
|
||||
||
|
||||
(extension_loaded('wincache') && ini_get('wincache.ocenabled'))
|
||||
;
|
||||
|
||||
$this->addRecommendation(
|
||||
$accelerator,
|
||||
'a PHP accelerator should be installed',
|
||||
'Install and/or enable a <strong>PHP accelerator</strong> (highly recommended).'
|
||||
);
|
||||
|
||||
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
|
||||
$this->addRecommendation(
|
||||
$this->getRealpathCacheSize() > 1000,
|
||||
'realpath_cache_size should be above 1024 in php.ini',
|
||||
'Set "<strong>realpath_cache_size</strong>" to e.g. "<strong>1024</strong>" in php.ini<a href="#phpini">*</a> to improve performance on windows.'
|
||||
);
|
||||
}
|
||||
|
||||
$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 <strong>PDO</strong> (mandatory for Doctrine).'
|
||||
);
|
||||
|
||||
if (class_exists('PDO')) {
|
||||
$drivers = PDO::getAvailableDrivers();
|
||||
$this->addRecommendation(
|
||||
count($drivers) > 0,
|
||||
sprintf('PDO should have some drivers installed (currently available: %s)', count($drivers) ? implode(', ', $drivers) : 'none'),
|
||||
'Install <strong>PDO drivers</strong> (mandatory for Doctrine).'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads realpath_cache_size from php.ini and converts it to int.
|
||||
*
|
||||
* (e.g. 16k is converted to 16384 int)
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
protected function getRealpathCacheSize()
|
||||
{
|
||||
$size = ini_get('realpath_cache_size');
|
||||
$size = trim($size);
|
||||
$unit = strtolower(substr($size, -1, 1));
|
||||
switch ($unit) {
|
||||
case 'g':
|
||||
return $size * 1024 * 1024 * 1024;
|
||||
case 'm':
|
||||
return $size * 1024 * 1024;
|
||||
case 'k':
|
||||
return $size * 1024;
|
||||
default:
|
||||
return (int) $size;
|
||||
}
|
||||
}
|
||||
}
|
||||
142
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/skeleton/app/check.php
vendored
Executable file
142
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/skeleton/app/check.php
vendored
Executable file
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
|
||||
require_once dirname(__FILE__).'/SymfonyRequirements.php';
|
||||
|
||||
$lineSize = 70;
|
||||
$symfonyRequirements = new SymfonyRequirements();
|
||||
$iniPath = $symfonyRequirements->getPhpIniConfigPath();
|
||||
|
||||
echo_title('Symfony Requirements Checker');
|
||||
|
||||
echo '> PHP is using the following php.ini file:'.PHP_EOL;
|
||||
if ($iniPath) {
|
||||
echo_style('green', ' '.$iniPath);
|
||||
} else {
|
||||
echo_style('yellow', ' 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 Symfony projects');
|
||||
} else {
|
||||
echo_block('error', 'ERROR', 'Your system is not ready to run Symfony projects');
|
||||
|
||||
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;
|
||||
}
|
||||
213
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/skeleton/web/config.php
vendored
Executable file
213
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/Resources/skeleton/web/config.php
vendored
Executable file
@@ -0,0 +1,213 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* ************** CAUTION **************
|
||||
*
|
||||
* DO NOT EDIT THIS FILE as it will be overridden by Composer as part of
|
||||
* the installation/update process. The original file resides in the
|
||||
* SensioDistributionBundle.
|
||||
*
|
||||
* ************** CAUTION **************
|
||||
*/
|
||||
|
||||
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 Checker</title>
|
||||
<link rel="stylesheet" href="bundles/framework/css/structure.css" media="all" />
|
||||
<link rel="stylesheet" href="bundles/framework/css/body.css" media="all" />
|
||||
<style type="text/css">
|
||||
/* styles copied from bundles/sensiodistribution/webconfigurator/css/install.css */
|
||||
body {
|
||||
font-size: 14px;
|
||||
font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
|
||||
}
|
||||
.sf-reset h1.title {
|
||||
font-size: 45px;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
.sf-reset h2 {
|
||||
font-weight: bold;
|
||||
color: #FFFFFF;
|
||||
/* Font is reset to sans-serif (like body) */
|
||||
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;
|
||||
}
|
||||
.sf-reset ul a,
|
||||
.sf-reset ul a:hover {
|
||||
background: url(../images/blue-arrow.png) no-repeat right 6px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
.sf-reset ul, ol {
|
||||
padding-left: 20px;
|
||||
}
|
||||
.sf-reset li {
|
||||
padding-bottom: 18px;
|
||||
}
|
||||
.sf-reset ol li {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.sf-reset ul li {
|
||||
list-style-type: none;
|
||||
}
|
||||
.sf-reset .symfony-blocks-install {
|
||||
overflow: hidden;
|
||||
}
|
||||
.sf-reset .symfony-install-continue {
|
||||
font-size: 0.95em;
|
||||
padding-left: 0;
|
||||
}
|
||||
.sf-reset .symfony-install-continue li {
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.sf-reset .ok {
|
||||
color: #fff;
|
||||
font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
|
||||
background-color: #6d6;
|
||||
padding: 10px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.sf-reset .ko {
|
||||
background-color: #d66;
|
||||
}
|
||||
.sf-reset p.help {
|
||||
padding: 12px 16px;
|
||||
word-break: break-word;
|
||||
}
|
||||
.version {
|
||||
text-align: right;
|
||||
font-size: 10px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
.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 textarea {
|
||||
padding: 7px;
|
||||
}
|
||||
</style>
|
||||
</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">Configuration Checker</h1>
|
||||
<p>
|
||||
This script analyzes your system to check whether is
|
||||
ready to run Symfony applications.
|
||||
</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->getTestMessage() ?>
|
||||
<p class="help"><em><?php echo $problem->getHelpHtml() ?></em></p>
|
||||
</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->getTestMessage() ?>
|
||||
<p class="help"><em><?php echo $problem->getHelpHtml() ?></em></p>
|
||||
</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">All checks passed successfully. Your system is ready to run Symfony applications.</p>
|
||||
<?php endif; ?>
|
||||
|
||||
<ul class="symfony-install-continue">
|
||||
<?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>
|
||||
25
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/SensioDistributionBundle.php
vendored
Executable file
25
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/SensioDistributionBundle.php
vendored
Executable file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Sensio\Bundle\DistributionBundle;
|
||||
|
||||
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||
|
||||
/**
|
||||
* SensioDistributionBundle.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
* @author Marc Weistroff <marc.weistroff@sensio.com>
|
||||
* @author Jérôme Vieilledent <lolautruche@gmail.com>
|
||||
*/
|
||||
class SensioDistributionBundle extends Bundle
|
||||
{
|
||||
}
|
||||
14
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/UPGRADE.md
vendored
Executable file
14
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/UPGRADE.md
vendored
Executable file
@@ -0,0 +1,14 @@
|
||||
UPGRADE FROM 4.0 to 5.0
|
||||
=======================
|
||||
|
||||
* The web configurator got removed. So you need to remove the `_configurator`
|
||||
routing entry from `app/config/routing_dev.yml`.
|
||||
|
||||
* The generated `app/bootstrap.php.cache` does not include autoloading anymore.
|
||||
So you need to add the autoloading code in your front controllers `web/app.php`,
|
||||
`web/app_dev.php`, `app/console` and `app/phpunit.xml.dist` (bootstrap config).
|
||||
|
||||
* If you have been using the Symfony 3 directory structure already, you need to
|
||||
overwrite the cache and log directories in your `AppKernel` as it is also done
|
||||
in Symfony 3 now (see
|
||||
[`app/AppKernel.php`](https://github.com/symfony/symfony-standard/blob/master/app/AppKernel.php#L31-L44)).
|
||||
32
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/composer.json
vendored
Executable file
32
Kapitel_10/Lektion_4/symfony/vendor/sensio/distribution-bundle/composer.json
vendored
Executable file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"name": "sensio/distribution-bundle",
|
||||
"description": "Base bundle for Symfony Distributions",
|
||||
"keywords": ["distribution","configuration"],
|
||||
"type": "symfony-bundle",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.3.9",
|
||||
"symfony/dependency-injection": "~2.3|~3.0",
|
||||
"symfony/config": "~2.3|~3.0",
|
||||
"symfony/filesystem": "~2.3|~3.0",
|
||||
"symfony/http-kernel": "~2.3|~3.0",
|
||||
"symfony/class-loader": "~2.3|~3.0",
|
||||
"symfony/process": "~2.3|~3.0",
|
||||
"sensiolabs/security-checker": "~3.0"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": { "Sensio\\Bundle\\DistributionBundle\\": "" }
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "5.0.x-dev"
|
||||
}
|
||||
},
|
||||
"minimum-stability": "dev"
|
||||
}
|
||||
Reference in New Issue
Block a user