Commit 903d772e authored by Fabien Potencier's avatar Fabien Potencier

Merge branch '1.3'

* 1.3:
  updated changelog
  allowed Twig 2.0
  allowed Symfony 3.0
  simplifed composer.json
  fixed some Form deprecations
  removed deprecated method call in the exception handler
  fixed test that did not restore the error handler properly
  added symfony/phpunit to catch deprecation notices
  Verify that the spool is enabled and an actual spool before flushing it
  [Docs] Add some links in the services chapter
parents 1a86c37a 721d8de4
......@@ -8,9 +8,11 @@ cache:
before_script:
# symfony/*
- sh -c "if [ '$SYMFONY_DEPS_VERSION' = '2.8' ]; then sed -i 's/~2.6/2.8.*@dev/g' composer.json; composer update --dev --prefer-source; fi"
- sh -c "if [ '$SYMFONY_DEPS_VERSION' = '2.7' ]; then sed -i 's/~2.6/2.7.*@dev/g' composer.json; composer update --dev --prefer-source; fi"
- composer install --dev --prefer-source
- sh -c "if [ '$TWIG_VERSION' != '2.0' ]; then sed -i 's/~1.8|~2.0/~1.8/g' composer.json; composer update; fi"
- sh -c "if [ '$SYMFONY_DEPS_VERSION' = '3.0' ]; then sed -i 's/~2\.7|3\.0\.\*/3.0.*@dev/g' composer.json; composer update; fi"
- sh -c "if [ '$SYMFONY_DEPS_VERSION' = '2.8' ]; then sed -i 's/~2\.7|3\.0\.\*/2.8.*@dev/g' composer.json; composer update; fi"
- sh -c "if [ '$SYMFONY_DEPS_VERSION' = '' ]; then sed -i 's/~2\.7|3\.0\.\*/2.7.*@dev/g' composer.json; composer update; fi"
- composer install
script: phpunit
......@@ -18,8 +20,10 @@ matrix:
include:
- php: 5.5
- php: 5.6
env: SYMFONY_DEPS_VERSION=2.7
env: TWIG_VERSION=2.0
- php: 5.6
env: SYMFONY_DEPS_VERSION=2.8
- php: 5.6
env: SYMFONY_DEPS_VERSION=3
- php: 7.0
- php: hhvm
{
"minimum-stability": "dev",
"name": "silex/silex",
"description": "The PHP micro-framework based on the Symfony Components",
"keywords": ["microframework"],
......@@ -18,41 +17,35 @@
"require": {
"php": ">=5.5.9",
"pimple/pimple": "~3.0",
"symfony/event-dispatcher": "~2.7",
"symfony/http-foundation": "~2.7",
"symfony/http-kernel": "~2.7",
"symfony/routing": "~2.7"
"symfony/event-dispatcher": "~2.7|3.0.*",
"symfony/http-foundation": "~2.7|3.0.*",
"symfony/http-kernel": "~2.7|3.0.*",
"symfony/routing": "~2.7|3.0.*"
},
"require-dev": {
"symfony/asset": "~2.7",
"symfony/security": "~2.7",
"symfony/config": "~2.7",
"symfony/locale": "~2.7",
"symfony/form": "~2.7",
"symfony/browser-kit": "~2.7",
"symfony/css-selector": "~2.7",
"symfony/debug": "~2.7",
"symfony/dom-crawler": "~2.7",
"symfony/finder": "~2.7",
"symfony/monolog-bridge": "~2.7",
"symfony/doctrine-bridge": "~2.7",
"symfony/options-resolver": "~2.7",
"symfony/process": "~2.7",
"symfony/serializer": "~2.7",
"symfony/translation": "~2.7",
"symfony/twig-bridge": "~2.7",
"symfony/validator": "~2.7",
"symfony/var-dumper": "~2.7",
"twig/twig": ">=1.8.0,<2.0-dev",
"symfony/asset": "~2.7|3.0.*",
"symfony/security": "~2.7|3.0.*",
"symfony/config": "~2.7|3.0.*",
"symfony/locale": "~2.7|3.0.*",
"symfony/form": "~2.7|3.0.*",
"symfony/browser-kit": "~2.7|3.0.*",
"symfony/css-selector": "~2.7|3.0.*",
"symfony/debug": "~2.7|3.0.*",
"symfony/dom-crawler": "~2.7|3.0.*",
"symfony/finder": "~2.7|3.0.*",
"symfony/monolog-bridge": "~2.7|3.0.*",
"symfony/doctrine-bridge": "~2.7|3.0.*",
"symfony/options-resolver": "~2.7|3.0.*",
"symfony/process": "~2.7|3.0.*",
"symfony/serializer": "~2.7|3.0.*",
"symfony/translation": "~2.7|3.0.*",
"symfony/twig-bridge": "~2.7|3.0.*",
"symfony/validator": "~2.7|3.0.*",
"symfony/var-dumper": "~2.7|3.0.*",
"twig/twig": "~1.8|~2.0",
"doctrine/dbal": "~2.2",
"swiftmailer/swiftmailer": "5.*",
"monolog/monolog": "~1.4,>=1.4.1"
},
"suggest": {
"symfony/browser-kit": "~2.7",
"symfony/css-selector": "~2.7",
"symfony/dom-crawler": "~2.7",
"symfony/form": "~2.7"
"swiftmailer/swiftmailer": "~5",
"monolog/monolog": "^1.4.1"
},
"replace": {
"silex/api": "self.version",
......@@ -68,5 +61,6 @@
"branch-alias": {
"dev-master": "2.0.x-dev"
}
}
},
"minimum-stability": "dev"
}
......@@ -27,7 +27,10 @@ Changelog
1.3.3 (2015-XX-XX)
------------------
* n/a
* added support for Symfony 3.0 and Twig 2.0
* fixed some Form deprecations
* removed deprecated method call in the exception handler
* fixed Swiftmailer spool flushing when spool is not enabled
1.3.2 (2015-08-24)
------------------
......
......@@ -192,7 +192,7 @@ Silex defines a range of services.
route parameters.
* **controllers**: The ``Silex\ControllerCollection`` that is used internally.
Check the *Internals* chapter for more information.
Check the :doc:`Internals chapter <internals>` for more information.
* **dispatcher**: The `EventDispatcher
<http://api.symfony.com/master/Symfony/Component/EventDispatcher/EventDispatcher.html>`_
......@@ -210,16 +210,16 @@ Silex defines a range of services.
Request as input and returns a Response as output.
* **request_context**: The request context is a simplified representation of
the request that is used by the Router and the UrlGenerator.
the request that is used by the Router and the :doc:`UrlGenerator </providers/url_generator.rst>`.
* **exception_handler**: The Exception handler is the default handler that is
used when you don't register one via the ``error()`` method or if your
handler does not return a Response. Disable it with
``unset($app['exception_handler'])``.
* **logger**: A ``Psr\Log\LoggerInterface`` instance. By default, logging is
* **logger**: A `LoggerInterface <https://github.com/php-fig/log/blob/master/Psr/Log/LoggerInterface.php>`_ instance. By default, logging is
disabled as the value is set to ``null``. To enable logging you can either use
the ``MonologServiceProvider`` or define your own ``logger`` service that
the :doc:`MonologServiceProvider <providers/monolog>` or define your own ``logger`` service that
conforms to the PSR logger interface.
Core traits
......
......@@ -29,7 +29,7 @@ trait FormTrait
*
* @return FormBuilder
*/
public function form($data = null, array $options = array(), $type = 'form')
public function form($data = null, array $options = array(), $type = 'Symfony\Component\Form\Extension\Core\Type\FormType')
{
return $this['form.factory']->createBuilder($type, $data, $options);
}
......
......@@ -12,7 +12,9 @@
namespace Silex;
use Symfony\Component\Debug\ExceptionHandler as DebugExceptionHandler;
use Symfony\Component\Debug\Exception\FlattenException;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;
......@@ -34,7 +36,19 @@ class ExceptionHandler implements EventSubscriberInterface
{
$handler = new DebugExceptionHandler($this->debug);
$event->setResponse($handler->createResponse($event->getException()));
if (method_exists($handler, 'getHtml')) {
$exception = $event->getException();
if (!$exception instanceof FlattenException) {
$exception = FlattenException::create($exception);
}
$response = Response::create($handler->getHtml($exception), $exception->getStatusCode(), $exception->getHeaders())->setCharset(ini_get('default_charset'));
} else {
// BC with Symfony < 2.8
$response = $handler->createResponse($event->getException());
}
$event->setResponse($response);
}
/**
......
......@@ -103,7 +103,7 @@ class SwiftmailerServiceProvider implements ServiceProviderInterface, EventListe
$onTerminate = function ($event) use ($app) {
// To speed things up (by avoiding Swift Mailer initialization), flush
// messages only if our mailer has been created (potentially used)
if ($app['mailer.initialized']) {
if ($app['mailer.initialized'] && $app['swiftmailer.use_spool'] && $app['swiftmailer.spooltransport'] instanceof \Swift_Transport_SpoolTransport) {
$app['swiftmailer.spooltransport']->getSpool()->flushQueue($app['swiftmailer.transport']);
}
};
......
......@@ -507,7 +507,7 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
{
$app = new Application();
ErrorHandler::register();
ErrorHandler::register(null, false);
$app['monolog.logfile'] = 'php://memory';
$app->register(new MonologServiceProvider());
$app->get('/foo/', function () { return 'ok'; });
......
......@@ -46,8 +46,8 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
return $extensions;
});
$form = $app['form.factory']->createBuilder('form', array())
->add('dummy', 'dummy')
$form = $app['form.factory']->createBuilder(class_exists('Symfony\Component\Form\Extension\Core\Type\RangeType') ? 'Symfony\Component\Form\Extension\Core\Type\FormType' : 'form', array())
->add('dummy', class_exists('Symfony\Component\Form\Extension\Core\Type\RangeType') ? 'Silex\Tests\Provider\DummyFormType' : 'dummy')
->getForm();
$this->assertInstanceOf('Symfony\Component\Form\Form', $form);
......@@ -65,8 +65,8 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
return $extensions;
});
$form = $app['form.factory']->createBuilder('form', array())
->add('file', 'file', array('image_path' => 'webPath'))
$form = $app['form.factory']->createBuilder(class_exists('Symfony\Component\Form\Extension\Core\Type\RangeType') ? 'Symfony\Component\Form\Extension\Core\Type\FormType' : 'form', array())
->add('file', class_exists('Symfony\Component\Form\Extension\Core\Type\RangeType') ? 'Symfony\Component\Form\Extension\Core\Type\FileType' : 'file', array('image_path' => 'webPath'))
->getForm();
$this->assertInstanceOf('Symfony\Component\Form\Form', $form);
......@@ -106,7 +106,7 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
return $this->getMock('Symfony\Component\Security\Csrf\CsrfTokenManagerInterface');
};
$form = $app['form.factory']->createBuilder('form', array())
$form = $app['form.factory']->createBuilder(class_exists('Symfony\Component\Form\Extension\Core\Type\RangeType') ? 'Symfony\Component\Form\Extension\Core\Type\FormType' : 'form', array())
->getForm();
$form->handleRequest($req = Request::create('/', 'POST', array('form' => array(
......@@ -159,14 +159,20 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
}
}
class DummyFormType extends AbstractType
{
/**
* @return string The name of this type
*/
public function getName()
if (class_exists('Symfony\Component\Form\Extension\Core\Type\RangeType')) {
class DummyFormType extends AbstractType
{
}
} else {
class DummyFormType extends AbstractType
{
return 'dummy';
/**
* @return string The name of this type
*/
public function getName()
{
return 'dummy';
}
}
}
......@@ -175,7 +181,7 @@ if (method_exists('Symfony\Component\Form\AbstractType', 'configureOptions')) {
{
public function getExtendedType()
{
return 'file';
return class_exists('Symfony\Component\Form\Extension\Core\Type\RangeType') ? 'Symfony\Component\Form\Extension\Core\Type\FileType' : 'file';
}
public function configureOptions(OptionsResolver $resolver)
......@@ -188,7 +194,7 @@ if (method_exists('Symfony\Component\Form\AbstractType', 'configureOptions')) {
{
public function getExtendedType()
{
return 'file';
return class_exists('Symfony\Component\Form\Extension\Core\Type\RangeType') ? 'Symfony\Component\Form\Extension\Core\Type\FileType' : 'file';
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
......
......@@ -88,7 +88,7 @@ class ValidatorServiceProviderTest extends \PHPUnit_Framework_TestCase
/**
* @depends testRegister
* @dataProvider testValidatorConstraintProvider
* @dataProvider getTestValidatorConstraintProvider
*/
public function testValidatorConstraint($email, $isValid, $nbGlobalError, $nbEmailError, $app)
{
......@@ -99,12 +99,12 @@ class ValidatorServiceProviderTest extends \PHPUnit_Framework_TestCase
),
));
$builder = $app['form.factory']->createBuilder('form', array(), array(
$builder = $app['form.factory']->createBuilder(class_exists('Symfony\Component\Form\Extension\Core\Type\RangeType') ? 'Symfony\Component\Form\Extension\Core\Type\FormType' : 'form', array(), array(
'constraints' => $constraints,
));
$form = $builder
->add('email', 'email', array('label' => 'Email'))
->add('email', class_exists('Symfony\Component\Form\Extension\Core\Type\RangeType') ? 'Symfony\Component\Form\Extension\Core\Type\EmailType' : 'email', array('label' => 'Email'))
->getForm()
;
......@@ -136,9 +136,9 @@ class ValidatorServiceProviderTest extends \PHPUnit_Framework_TestCase
}
}
public function testValidatorConstraintProvider()
public function getTestValidatorConstraintProvider()
{
// Email, form is valid , nb global error, nb email error
// Email, form is valid, nb global error, nb email error
return array(
array('', false, 0, 1),
array('not an email', false, 0, 1),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment