Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Sign in
Toggle navigation
S
Silex
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
common
Silex
Commits
7c38c9a8
Commit
7c38c9a8
authored
Nov 23, 2012
by
Dave Marshall
Committed by
Fabien Potencier
Mar 08, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add services allowing for form type extensions and guessers
parent
fcd93b34
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
107 additions
and
4 deletions
+107
-4
.travis.yml
.travis.yml
+1
-1
composer.json
composer.json
+3
-2
doc/providers/form.rst
doc/providers/form.rst
+18
-1
src/Silex/Provider/FormServiceProvider.php
src/Silex/Provider/FormServiceProvider.php
+11
-0
tests/Silex/Tests/Provider/FormServiceProviderTest.php
tests/Silex/Tests/Provider/FormServiceProviderTest.php
+74
-0
No files found.
.travis.yml
View file @
7c38c9a8
...
@@ -7,7 +7,7 @@ env:
...
@@ -7,7 +7,7 @@ env:
before_script
:
before_script
:
# symfony/*
# symfony/*
-
sh -c "if [ '$SYMFONY_DEPS_VERSION' = '2.2' ]; then sed -i 's/>=2.1,<2.3-dev/2.2.*@dev/g' composer.json; composer require --no-update 'symfony/property-access:2.2.*@dev'; composer update --dev --prefer-source; fi"
-
sh -c "if [ '$SYMFONY_DEPS_VERSION' = '2.2' ]; then sed -i 's/>=2.1,<2.3-dev/2.2.*@dev/g' composer.json; composer require --no-update 'symfony/property-access:2.2.*@dev'; composer update --dev --prefer-source; fi"
-
sh -c "if [ '$SYMFONY_DEPS_VERSION' = '2.1' ]; then sed -i 's/>=2.1,<2.3-dev/2.1.*@dev/g' composer.json; composer update --dev --prefer-source; fi"
-
sh -c "if [ '$SYMFONY_DEPS_VERSION' = '2.1' ]; then sed -i 's/>=2.1
\(.[0-9]\+\)\?
,<2.3-dev/2.1.*@dev/g' composer.json; composer update --dev --prefer-source; fi"
-
composer install --dev --prefer-source
-
composer install --dev --prefer-source
php
:
php
:
...
...
composer.json
View file @
7c38c9a8
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
"
symfony/security
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/security
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/config
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/config
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/locale
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/locale
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/form
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/form
"
:
"
>=2.1
.4
,<2.3-dev
"
,
"
symfony/browser-kit
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/browser-kit
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/css-selector
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/css-selector
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/dom-crawler
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/dom-crawler
"
:
"
>=2.1,<2.3-dev
"
,
...
@@ -45,7 +45,8 @@
...
@@ -45,7 +45,8 @@
"suggest"
:
{
"suggest"
:
{
"
symfony/browser-kit
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/browser-kit
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/css-selector
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/css-selector
"
:
"
>=2.1,<2.3-dev
"
,
"
symfony/dom-crawler
"
:
"
>=2.1,<2.3-dev
"
"
symfony/dom-crawler
"
:
"
>=2.1,<2.3-dev
"
,
"symfony/form"
:
"To make use of the FormServiceProvider, >= 2.1.4 is required"
},
},
"autoload"
:
{
"autoload"
:
{
"psr-0"
:
{
"Silex"
:
"src/"
}
"psr-0"
:
{
"Silex"
:
"src/"
}
...
...
doc/providers/form.rst
View file @
7c38c9a8
...
@@ -55,7 +55,7 @@ Registering
...
@@ -55,7 +55,7 @@ Registering
.. code-block:: json
.. code-block:: json
"require": {
"require": {
"symfony/form": "~2.1"
"symfony/form": "~2.1
.4
"
}
}
If you are going to use the validation extension with forms, you must also
If you are going to use the validation extension with forms, you must also
...
@@ -170,6 +170,23 @@ You can register form extensions by extending ``form.extensions``::
...
@@ -170,6 +170,23 @@ You can register form extensions by extending ``form.extensions``::
return $extensions;
return $extensions;
}));
}));
You can register form type extensions by extending ``form.type.extensions``::
$app['form.type.extensions'] = $app->share($app->extend('form.type.extensions', function ($extensions) use ($app) {
$extensions[] = new YourFormTypeExtension();
return $extensions;
}));
You can register form type guessers by extending ``form.type.guessers``::
$app['form.type.guessers'] = $app->share($app->extend('form.type.guessers', function ($guessers) use ($app) {
$guessers[] = new YourFormTypeGuesser();
return $guessers;
}));
Traits
Traits
------
------
...
...
src/Silex/Provider/FormServiceProvider.php
View file @
7c38c9a8
...
@@ -18,6 +18,7 @@ use Symfony\Component\Form\Extension\Csrf\CsrfProvider\DefaultCsrfProvider;
...
@@ -18,6 +18,7 @@ use Symfony\Component\Form\Extension\Csrf\CsrfProvider\DefaultCsrfProvider;
use
Symfony\Component\Form\Extension\Csrf\CsrfProvider\SessionCsrfProvider
;
use
Symfony\Component\Form\Extension\Csrf\CsrfProvider\SessionCsrfProvider
;
use
Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension
;
use
Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension
;
use
Symfony\Component\Form\Extension\Validator\ValidatorExtension
as
FormValidatorExtension
;
use
Symfony\Component\Form\Extension\Validator\ValidatorExtension
as
FormValidatorExtension
;
use
Symfony\Component\Form\FormTypeGuesserChain
;
use
Symfony\Component\Form\Forms
;
use
Symfony\Component\Form\Forms
;
/**
/**
...
@@ -46,6 +47,14 @@ class FormServiceProvider implements ServiceProviderInterface
...
@@ -46,6 +47,14 @@ class FormServiceProvider implements ServiceProviderInterface
$app
[
'form.secret'
]
=
md5
(
__DIR__
);
$app
[
'form.secret'
]
=
md5
(
__DIR__
);
$app
[
'form.type.extensions'
]
=
$app
->
share
(
function
(
$app
)
{
return
array
();
});
$app
[
'form.type.guessers'
]
=
$app
->
share
(
function
(
$app
)
{
return
array
();
});
$app
[
'form.extensions'
]
=
$app
->
share
(
function
(
$app
)
{
$app
[
'form.extensions'
]
=
$app
->
share
(
function
(
$app
)
{
$extensions
=
array
(
$extensions
=
array
(
new
CsrfExtension
(
$app
[
'form.csrf_provider'
]),
new
CsrfExtension
(
$app
[
'form.csrf_provider'
]),
...
@@ -67,6 +76,8 @@ class FormServiceProvider implements ServiceProviderInterface
...
@@ -67,6 +76,8 @@ class FormServiceProvider implements ServiceProviderInterface
$app
[
'form.factory'
]
=
$app
->
share
(
function
(
$app
)
{
$app
[
'form.factory'
]
=
$app
->
share
(
function
(
$app
)
{
return
Forms
::
createFormFactoryBuilder
()
return
Forms
::
createFormFactoryBuilder
()
->
addExtensions
(
$app
[
'form.extensions'
])
->
addExtensions
(
$app
[
'form.extensions'
])
->
addTypeExtensions
(
$app
[
'form.type.extensions'
])
->
addTypeGuessers
(
$app
[
'form.type.guessers'
])
->
getFormFactory
()
->
getFormFactory
()
;
;
});
});
...
...
tests/Silex/Tests/Provider/FormServiceProviderTest.php
0 → 100644
View file @
7c38c9a8
<?php
/*
* This file is part of the Silex framework.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace
Silex\Tests\Provider
;
use
Silex\Application
;
use
Silex\Provider\FormServiceProvider
;
use
Symfony\Component\Form\AbstractTypeExtension
;
use
Symfony\Component\Form\FormTypeGuesserChain
;
use
Symfony\Component\OptionsResolver\OptionsResolverInterface
;
class
FormServiceProviderTest
extends
\PHPUnit_Framework_TestCase
{
public
function
testFormFactoryServiceIsFormFactory
()
{
$app
=
new
Application
();
$app
->
register
(
new
FormServiceProvider
());
$this
->
assertInstanceOf
(
'Symfony\Component\Form\FormFactory'
,
$app
[
'form.factory'
]);
}
public
function
testFormServiceProviderWillLoadTypeExtensions
()
{
$app
=
new
Application
();
$app
->
register
(
new
FormServiceProvider
());
$app
[
'form.type.extensions'
]
=
$app
->
share
(
$app
->
extend
(
'form.type.extensions'
,
function
(
$extensions
)
{
$extensions
[]
=
new
DummyFormTypeExtension
();
return
$extensions
;
}));
$form
=
$app
[
'form.factory'
]
->
createBuilder
(
'form'
,
array
())
->
add
(
'file'
,
'file'
,
array
(
'image_path'
=>
'webPath'
))
->
getForm
();
$this
->
assertInstanceOf
(
'Symfony\Component\Form\Form'
,
$form
);
}
public
function
testFormServiceProviderWillLoadTypeGuessers
()
{
$app
=
new
Application
();
$app
->
register
(
new
FormServiceProvider
());
$app
[
'form.type.guessers'
]
=
$app
->
share
(
$app
->
extend
(
'form.type.guessers'
,
function
(
$guessers
)
{
$guessers
[]
=
new
FormTypeGuesserChain
(
array
());
return
$guessers
;
}));
$this
->
assertInstanceOf
(
'Symfony\Component\Form\FormFactory'
,
$app
[
'form.factory'
]);
}
}
class
DummyFormTypeExtension
extends
AbstractTypeExtension
{
public
function
getExtendedType
()
{
return
'file'
;
}
public
function
setDefaultOptions
(
OptionsResolverInterface
$resolver
)
{
$resolver
->
setOptional
(
array
(
'image_path'
));
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment