Commit Graph

20725 Commits

Author SHA1 Message Date
Diego Saint Esteben 17d265a526 Added missing changelog entry 2015-04-01 10:08:53 -03:00
Nicolas Grekas 5188cfecc5 feature #14080 [VarDumper] Add casters for Reflection* classes (nicolas-grekas)
This PR was merged into the 2.7 branch.

Discussion
----------

[VarDumper] Add casters for Reflection* classes

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | yes
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

Will need a rebase on top of #14079 and #14077 to be mergeable/green.

Commits
-------

64d6e76 [VarDumper] Add casters for Reflection* classes
2015-04-01 13:40:31 +02:00
Bernhard Schussek 7523f685eb [TwigBridge] Pushed symfony/form dependency from ~2.6 to ~2.7 2015-04-01 13:22:40 +02:00
Bernhard Schussek 2b5efbbd35 [FrameworkBundle] Pushed symfony/form dependency from ~2.6 to to ~2.7 2015-04-01 13:20:04 +02:00
Bernhard Schussek 776796435e feature #14050 [Form] Refactored choice lists to support dynamic label, value, index and attribute generation (webmozart)
This PR was merged into the 2.7 branch.

Discussion
----------

[Form] Refactored choice lists to support dynamic label, value, index and attribute generation

This is a rebase of #12148 on the 2.7 branch.

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | yes
| Deprecations? | yes
| Tests pass?   | yes
| Fixed tickets | #4067, #5494, #3836, #8658, #12148
| License       | MIT
| Doc PR        | TODO

I implemented the additional options "choice_label", "choice_name", "choice_value", "choice_attr", "group_by" and "choices_as_values" for ChoiceType. Additionally the "preferred_choices" option was updated to accept callables and property paths.

The "choices_as_values" option will be removed in Symfony 3.0, where the choices will be passed in the values of the "choices" option by default. The reason for that is that, right now, choices are limited to strings and integers (i.e. valid array keys). When we flip the array, we remove that limitation. Since choice labels are always strings, we can also always use them as array keys:

```php
// Not possible currently, but possible with "flip_choices"
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Yes' => true,
        'No' => false,
        'Maybe' => null,
    ),
    'choices_as_values' => true,
));
```

All the features described here obviously also apply to subtypes of "choice", such as "entity".

**choice_label**

Returns the label for each choice. Can be a callable (which receives the choice as first and the key of the "choices" array as second argument) or a property path.

If `null`, the keys of the "choices" array are used as labels.

```php
// callable
$builder->add('attending', 'choice', array(
    'choices' => array(
        'yes' => true,
        'no' => false,
        'maybe' => null,
    ),
    'choices_as_values' => true,
    'choice_label' => function ($choice, $key) {
        return 'form.choice.'.$key;
    },
));

// property path
$builder->add('attending', 'choice', array(
    'choices' => array(
        Status::getInstance(Status::YES),
        Status::getInstance(Status::NO),
        Status::getInstance(Status::MAYBE),
    ),
    'choices_as_values' => true,
    'choice_label' => 'displayName',
));
```

**choice_name**

Returns the form name for each choice. That name is used as name of the checkbox/radio form for this choice. It is also used as index of the choice views in the template. Can be a callable (like for "choice_label") or a property path.

The generated names must be valid form names, i.e. contain alpha-numeric symbols, underscores, hyphens and colons only. They must start with an alpha-numeric symbol or an underscore.

If `null`, an incrementing integer is used as name.

```php
// callable
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Yes' => true,
        'No' => false,
        'Maybe' => null,
    ),
    'choices_as_values' => true,
    'choice_name' => function ($choice, $key) {
        // use the labels as names
        return strtolower($key);
    },
));

// property path
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Yes' => Status::getInstance(Status::YES),
        'No' => Status::getInstance(Status::NO),
        'Maybe' => Status::getInstance(Status::MAYBE),
    ),
    'choices_as_values' => true,
    'choice_name' => 'value',
));
```

**choice_value**

Returns the string value for each choice. This value is displayed in the "value" attributes and submitted in the POST/PUT requests. Can be a callable (like for "choice_label") or a property path.

If `null`, an incrementing integer is used as value.

```php
// callable
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Yes' => true,
        'No' => false,
        'Maybe' => null,
    ),
    'choices_as_values' => true,
    'choice_value' => function ($choice, $key) {
        if (null === $choice) {
            return 'null';
        }

        if (true === $choice) {
            return 'true';
        }

        return 'false';
    },
));

// property path
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Yes' => Status::getInstance(Status::YES),
        'No' => Status::getInstance(Status::NO),
        'Maybe' => Status::getInstance(Status::MAYBE),
    ),
    'choices_as_values' => true,
    'choice_value' => 'value',
));
```

**choice_attr**

Returns the additional HTML attributes for choices. Can be an array, a callable (like for "choice_label") or a property path.
If an array, the key of the "choices" array must be used as keys.

```php
// array
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Yes' => true,
        'No' => false,
        'Maybe' => null,
    ),
    'choices_as_values' => true,
    'choice_attr' => array(
        'Maybe' => array('class' => 'greyed-out'),
    ),
));

// callable
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Yes' => true,
        'No' => false,
        'Maybe' => null,
    ),
    'choices_as_values' => true,
    'choice_attr' => function ($choice, $key) {
        if (null === $choice) {
            return array('class' => 'greyed-out');
        }
    },
));

// property path
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Yes' => Status::getInstance(Status::YES),
        'No' => Status::getInstance(Status::NO),
        'Maybe' => Status::getInstance(Status::MAYBE),
    ),
    'choices_as_values' => true,
    'choice_value' => 'htmlAttributes',
));
```

**group_by**

Returns the grouping used for the choices. Can be an array/Traversable, a callable (like for "choice_label") or a property path.

The return values of the callable/property path are used as group labels. If `null` is returned, a choice is not grouped.

If `null`, the structure of the "choices" array is used to construct the groups.

```php
// default
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Decided' => array(
            'Yes' => true,
            'No' => false,
        ),
        'Undecided' => array(
            'Maybe' => null,
        ),
    ),
    'choices_as_values' => true,
));

// callable
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Yes' => true,
        'No' => false,
        'Maybe' => null,
    ),
    'choices_as_values' => true,
    'group_by' => function ($choice, $key) {
        if (null === $choice) {
            return 'Undecided';
        }

        return 'Decided';
    },
));

// property path
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Yes' => Status::getInstance(Status::YES),
        'No' => Status::getInstance(Status::NO),
        'Maybe' => Status::getInstance(Status::MAYBE),
    ),
    'choices_as_values' => true,
    'group_by' => 'type',
));
```

**preferred_choices**

Returns the preferred choices. Can be an array/Traversable, a callable (like for "choice_label") or a property path.

```php
// array
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Yes' => true,
        'No' => false,
        'Maybe' => null,
    ),
    'choices_as_values' => true,
    'preferred_choices' => array(true),
));

// callable
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Yes' => true,
        'No' => false,
        'Maybe' => null,
    ),
    'choices_as_values' => true,
    'preferred_choices' => function ($choice, $key) {
        return true === $choice;
    },
));

// property path
$builder->add('attending', 'choice', array(
    'choices' => array(
        'Yes' => Status::getInstance(Status::YES),
        'No' => Status::getInstance(Status::NO),
        'Maybe' => Status::getInstance(Status::MAYBE),
    ),
    'choices_as_values' => true,
    'preferred_choices' => 'preferred',
));
```

**Technical Changes**

To properly implement all this, the old `ChoiceListInterface` class was deprecated and replaced by a new, slimmer one. The creation of choice views is now separated from choice lists. Hence a lot of logic is not executed anymore when processing (but not displaying) a form.

Internally, a `ChoiceListFactoryInterface` implementation is used to construct choice lists and choice views. Two decorators exist for this class:

* `CachingFactoryDecorator`: caches choice lists/views so that multiple fields displaying the same choices (e.g. in collection fields) use the same choice list/view
* `PropertyAccessDecorator`: adds support for property paths to a factory

**BC Breaks**

The option "choice_list" of ChoiceType now contains a `Symfony\Component\Form\ChoiceList\ChoiceListInterface` instance, which is a super-type of the deprecated `ChoiceListInterface`.

**Todos**

- [ ] Adapt CHANGELOGs
- [ ] Adapt UPGRADE files
- [ ] symfony/symfony-docs issue/PR

Commits
-------

94d18e9 [Form] Fixed CS
7e0960d [Form] Fixed failing layout tests
1d89922 [Form] Fixed tests using legacy functionality
d6179c8 [Form] Fixed PR comments
26eba76 [Form] Fixed regression: Choices are compared by their values if a value callback is given
a289deb [Form] Fixed new ArrayChoiceList to compare choices by their values, if enabled
e6739bf [DoctrineBridge] DoctrineType now respects the "query_builder" option when caching the choice loader
3846b37 [DoctrineBridge] Fixed: don't cache choice lists if query builders are constructed dynamically
03efce1 [Form] Refactored choice lists to support dynamic label, value, index and attribute generation
2015-04-01 12:04:55 +02:00
Bernhard Schussek 94d18e961c [Form] Fixed CS 2015-04-01 11:48:14 +02:00
Bernhard Schussek 7e0960d716 [Form] Fixed failing layout tests 2015-04-01 11:48:14 +02:00
Bernhard Schussek 1d89922782 [Form] Fixed tests using legacy functionality 2015-04-01 11:48:11 +02:00
Bernhard Schussek d6179c830b [Form] Fixed PR comments 2015-04-01 11:47:34 +02:00
Nicolas Grekas ef886548a0 Merge branch '2.6' into 2.7
* 2.6:
  [travis] Fix tests cancellations
2015-04-01 09:24:08 +02:00
Nicolas Grekas 48bd5500d0 Merge branch '2.3' into 2.6
* 2.3:
  [travis] Fix tests cancellations
2015-04-01 09:23:56 +02:00
Nicolas Grekas 85c97815f3 minor #14141 [travis] Revert tests cancellations and don't fail if memcached is not avail (nicolas-grekas)
This PR was merged into the 2.3 branch.

Discussion
----------

[travis] Revert tests cancellations and don't fail if memcached is not avail

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

I don't understand how travis gets its $TRAVIS_COMMIT, but this should make things stable again.

Commits
-------

7441955 [travis] Fix tests cancellations
2015-04-01 09:23:35 +02:00
Nicolas Grekas 7441955a50 [travis] Fix tests cancellations 2015-04-01 08:29:01 +02:00
Nicolas Grekas 64d6e76e42 [VarDumper] Add casters for Reflection* classes 2015-03-31 21:51:54 +02:00
Nicolas Grekas b1e2dedf9e feature #14079 [VarDumper] Add and use Caster::PREFIX_* consts (nicolas-grekas)
This PR was merged into the 2.7 branch.

Discussion
----------

[VarDumper] Add and use Caster::PREFIX_* consts

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

Will need a rebase on top of #14058 once it is merged

Commits
-------

86cf8de [VarDumper] Make use of Caster::PREFIX_* consts
2015-03-31 17:03:27 +02:00
Nicolas Grekas 86cf8dee5e [VarDumper] Make use of Caster::PREFIX_* consts 2015-03-31 16:41:17 +02:00
Nicolas Grekas c5dce60c88 minor #14137 [VarDumper] Optimized some code (lyrixx)
This PR was merged into the 2.7 branch.

Discussion
----------

[VarDumper] Optimized some code

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | ✘
| License       | MIT
| Doc PR        | ✘

asked by @nicolas-grekas

Commits
-------

e8d2983 [VarDumper] Optimized some code
2015-03-31 16:19:58 +02:00
Grégoire Pineau e8d2983d9e [VarDumper] Optimized some code 2015-03-31 15:54:17 +02:00
stloyd 13ec9ffafc Remove dead code from FrameworkExtension & LogoutUrlHelper 2015-03-31 15:19:41 +02:00
Joseph Bielawski 52885f0ade [DoctrineBridge] Add missing variable declaration in testcase 2015-03-31 14:57:19 +02:00
Bernhard Schussek 26eba769b5 [Form] Fixed regression: Choices are compared by their values if a value callback is given 2015-03-31 14:43:48 +02:00
Bernhard Schussek a289deb973 [Form] Fixed new ArrayChoiceList to compare choices by their values, if enabled 2015-03-31 14:43:48 +02:00
Bernhard Schussek e6739bf05e [DoctrineBridge] DoctrineType now respects the "query_builder" option when caching the choice loader 2015-03-31 14:43:48 +02:00
Bernhard Schussek 3846b3750a [DoctrineBridge] Fixed: don't cache choice lists if query builders are constructed dynamically 2015-03-31 14:43:48 +02:00
Bernhard Schussek 03efce1b56 [Form] Refactored choice lists to support dynamic label, value, index and attribute generation 2015-03-31 14:43:48 +02:00
Xavier Leune 94d3876c4c FIX #13919 added TranslationsCacheWarmer to generate catalogues at warmup 2015-03-31 14:07:52 +02:00
Nicolas Grekas 75c8a2ba21 minor #14122 [VarDumper] Fix tests typo (ogizanagi)
This PR was merged into the 2.7 branch.

Discussion
----------

[VarDumper] Fix tests typo

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | ✘
| License       | MIT
| Doc PR        | ✘

I guess there is a typo here, Travis reported (php >=5.6, see https://travis-ci.org/symfony/symfony/jobs/56527757 for instance):
> 1) Symfony\Component\VarDumper\Tests\CliDumperTest::testSpecialVars56
Undefined variable: out
/home/travis/build/symfony/symfony/vendor/symfony/phpunit-bridge/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php:38
/home/travis/build/symfony/symfony/src/Symfony/Component/VarDumper/Tests/CliDumperTest.php:218

Commits
-------

c5f39aa [VarDumper] CliDumper: fix test typo
2015-03-31 10:27:26 +02:00
Nicolas Grekas a86a41940a Merge branch '2.6' into 2.7
* 2.6:
  [VarDumper] Fix dumping references as properties
  [VarDumper] Fix toggle action to see source excerpt
2015-03-31 10:26:01 +02:00
Fabien Potencier 82400f8427 bug #14126 [VarDumper] Fix toggle action to see source excerpt (nicolas-grekas)
This PR was merged into the 2.6 branch.

Discussion
----------

[VarDumper] Fix toggle action to see source excerpt

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

A pure JavaScript fix

Commits
-------

10f7133 [VarDumper] Fix toggle action to see source excerpt
2015-03-31 10:16:37 +02:00
Fabien Potencier 29e153ebdf bug #14114 [VarDumper] Fix dumping references as properties (nicolas-grekas)
This PR was merged into the 2.6 branch.

Discussion
----------

[VarDumper] Fix dumping references as properties

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

Just discovered this while reviewing an other PR.
Using `array_combine()` preserves references now.

Commits
-------

6c6560e [VarDumper] Fix dumping references as properties
2015-03-31 10:15:34 +02:00
Nicolas Grekas 6c6560e5f5 [VarDumper] Fix dumping references as properties 2015-03-31 10:12:29 +02:00
Nicolas Grekas 10f713385e [VarDumper] Fix toggle action to see source excerpt 2015-03-31 10:08:51 +02:00
Hugo Hamon 5d96f4dbd7 [FrameworkBundle] added a protected shortcut getParameter() method in the base Controller class. 2015-03-31 09:47:41 +02:00
ogizanagi c5f39aa32f [VarDumper] CliDumper: fix test typo 2015-03-31 08:02:47 +02:00
Fabien Potencier 6ef12044f7 fixed typo 2015-03-30 17:59:31 +02:00
Fabien Potencier d5c873cf5a Merge branch '2.6' into 2.7
* 2.6:
  [Validator] Add missing pt_BR translations
  Add parsing of hexadecimal strings for PHP 7
  [Configuration] improve description for ignoreExtraKeys on ArrayNodeDefinition
  [Validator] Added missing Hungarian translation
  [Validator] Fixed grammar in Hungarian translation
  CS: Unary operators should be placed adjacent to their operands
  CS: Binary operators should be arounded by at least one space
  remove useless tests that fail in php 7
  [Translator] fix test for php 7 compatibility
  Update phpdoc of ProcessBuilder#setPrefix()

Conflicts:
	src/Symfony/Bridge/Propel1/Logger/PropelLogger.php
	src/Symfony/Component/Validator/Resources/translations/validators.hu.xlf
2015-03-30 17:55:07 +02:00
Fabien Potencier 2c4b5e5bbe Merge branch '2.3' into 2.6
* 2.3:
  [Validator] Add missing pt_BR translations
  Add parsing of hexadecimal strings for PHP 7
  [Configuration] improve description for ignoreExtraKeys on ArrayNodeDefinition
  [Validator] Added missing Hungarian translation
  [Validator] Fixed grammar in Hungarian translation
  CS: Unary operators should be placed adjacent to their operands
  CS: Binary operators should be arounded by at least one space
  remove useless tests that fail in php 7
  [Translator] fix test for php 7 compatibility
  Update phpdoc of ProcessBuilder#setPrefix()

Conflicts:
	src/Symfony/Component/HttpFoundation/Session/Attribute/NamespacedAttributeBag.php
	src/Symfony/Component/PropertyAccess/PropertyAccessor.php
	src/Symfony/Component/Validator/Resources/translations/validators.pt_BR.xlf
	src/Symfony/Component/Yaml/Parser.php
2015-03-30 17:54:10 +02:00
Fabien Potencier a8e2c743c2 feature #14057 [RFC][Console] Added console style guide helpers (v2) (kbond)
This PR was squashed before being merged into the 2.7 branch (closes #14057).

Discussion
----------

[RFC][Console] Added console style guide helpers (v2)

*(Rebased to 2.7)*

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #12014, #12035, symfony/symfony-docs#4265
| License       | MIT
| Doc PR        | todo

## Proposed API

### Code

```php
// Symfony command
protected function execute(InputInterface $input, OutputInterface $output)
{
    $output = new SymfonyStyle($output);

    $output->title('Lorem Ipsum Dolor Sit Amet');
    $output->text(array(
        'Duis aute irure dolor in reprehenderit in voluptate velit esse',
        'cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat'
    ));
    $output->ln();

    $output->table(array('Name', 'Method', 'Scheme', 'Host', 'Path'), array(
            array('admin_post_new', 'ANY', 'ANY', 'ANY', '/admin/post/new'),
            array('admin_post_show', 'GET', 'ANY', 'ANY', '/admin/post/{id}'),
            array('admin_post_edit', 'ANY', 'ANY', 'ANY', '/admin/post/{id}/edit'),
            array('admin_post_delete', 'DELETE', 'ANY', 'ANY', '/admin/post/{id}'),
        ));

    $output->caution(array(
            'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.',
            'foo'
        ));
    $output->section('Consectetur Adipisicing Elit Sed Do Eiusmod');
    $output->listing(array(
        'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod, tempor incididunt ut labore et dolore magna aliqua.',
        'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo.',
        'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
    ));

    $customValidator = function ($value) {
        if ($value == 'foo') {
            throw new \Exception('cannot be foo');
        }

        return $value;
    };

    // hidden question
    $output->note($output->askHidden('Hidden question'));

    // choice questions
    $output->note($output->choice('Choice question no default', array('choice1', 'choice2')));
    $output->note($output->choice('Choice question with default', array('choice1', 'choice2'), 'choice1'));

    // confirmation questions
    $output->note($output->confirm('Confirmation with yes default', true) ? 'yes' : 'no');
    $output->note($output->confirm('Confirmation with no default', false) ? 'yes' : 'no');

    // standard questions
    $output->note($output->ask('Question no default'));
    $output->note($output->ask('Question no default and custom validator', null, $customValidator));
    $output->note($output->ask('Question with default', 'default'));
    $output->note($output->ask('Question with default and custom validator', 'default', $customValidator));

    $output->note('Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat.');
    $output->success('Lorem ipsum dolor sit amet, consectetur adipisicing elit');
    $output->error('Duis aute irure dolor in reprehenderit in voluptate velit esse.');
    $output->warning('Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi.');

    $output->progressStart(100);

    for ($i = 0; $i < 100; $i++) {
        usleep(10000);
        $output->progressAdvance();
    }

    $output->progressFinish();
}
```

### Output

```
$ php app/console command

Lorem Ipsum Dolor Sit Amet
==========================

 // Duis aute irure dolor in reprehenderit in voluptate velit esse
 // cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat

 ------------------- -------- -------- ------ -----------------------
  Name                Method   Scheme   Host   Path
 ------------------- -------- -------- ------ -----------------------
  admin_post_new      ANY      ANY      ANY    /admin/post/new
  admin_post_show     GET      ANY      ANY    /admin/post/{id}
  admin_post_edit     ANY      ANY      ANY    /admin/post/{id}/edit
  admin_post_delete   DELETE   ANY      ANY    /admin/post/{id}
 ------------------- -------- -------- ------ -----------------------

 ! [CAUTION] Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
 ! dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris. Lorem ipsum dolor sit amet,
 ! consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
 ! veniam, quis nostrud exercitation ullamco laboris.
 !
 ! foo

Consectetur Adipisicing Elit Sed Do Eiusmod
-------------------------------------------

 * Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod, tempor incididunt ut labore et dolore magna aliqua.

 * Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo.

 * Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Hidden question:
 > <f><o><o><enter>

 ! [NOTE] foo

 Choice question no default:
  [0] choice1
  [1] choice2
 > <enter>

 [ERROR] Value "" is invalid

 Choice question no default:
  [0] choice1
  [1] choice2
 > 0<enter>

 ! [NOTE] choice1

 Choice question with default [choice1]:
  [0] choice1
  [1] choice2
 > 1<enter>

 ! [NOTE] choice2

 Confirmation with yes default (yes/no) [yes]:
 > <enter>

 ! [NOTE] yes

 Confirmation with no default (yes/no) [no]:
 > <enter>

 ! [NOTE] no

 Question no default:
 > <enter>

 [ERROR] A value is required.

 Question no default:
 > foo<enter>

 ! [NOTE] foo

 Question no default and custom validator:
 > foo<enter>

 [ERROR] cannot be foo

 Question no default and custom validator:
 > <enter>

 [ERROR] A value is required.

 Question no default and custom validator:
 > foo<enter>

 [ERROR] cannot be foo

 Question no default and custom validator:
 > bar<enter>

 ! [NOTE] bar

 Question with default [default]:
 > <enter>

 ! [NOTE] default

 Question with default and custom validator [default]:
 > <enter>

 ! [NOTE] default

 ! [NOTE] Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
 ! Excepteur sint occaecat cupidatat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
 ! fugiat nulla pariatur. Excepteur sint occaecat cupidatat. Duis aute irure dolor in reprehenderit in voluptate velit
 ! esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat.

 [OK] Lorem ipsum dolor sit amet, consectetur adipisicing elit

 [ERROR] Duis aute irure dolor in reprehenderit in voluptate velit esse.

 [WARNING] Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi.

 100/100 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%

```

### Screenshots

![screen1](https://cloud.githubusercontent.com/assets/127811/4507077/53bc009c-4b09-11e4-937c-44fe7fe30dc0.png)

![screen2](https://cloud.githubusercontent.com/assets/127811/4507078/53bf982e-4b09-11e4-8b5a-8c44c20ae4d9.png)

![screen](https://cloud.githubusercontent.com/assets/127811/6848451/b2e64848-d3a3-11e4-9916-43bd377684ca.png)

Commits
-------

96b4210 [RFC][Console] Added console style guide helpers (v2)
2015-03-30 17:51:05 +02:00
Kevin Bond 96b4210de5 [RFC][Console] Added console style guide helpers (v2) 2015-03-30 17:51:02 +02:00
Fabien Potencier 9215c222ff minor #14101 [Configuration] improve description for ignoreExtraKeys on ArrayNodeDefinition (cordoval)
This PR was merged into the 2.3 branch.

Discussion
----------

[Configuration] improve description for ignoreExtraKeys on ArrayNodeDefinition

|Q            |A  |
|---          |---|
|Bug Fix?     |y  |
|New Feature? |n  |
|BC Breaks?   |n  |
|Deprecations?|n  |
|Tests Pass?  |y  |
|Fixed Tickets| #13957  |
|License      |MIT|
|Doc PR       |   |

Commits
-------

b735022 [Configuration] improve description for ignoreExtraKeys on ArrayNodeDefinition
2015-03-30 17:47:26 +02:00
Fabien Potencier ac5c5a5fd2 feature #14077 [VarDumper] Add VarDumperTestCase and related trait (nicolas-grekas)
This PR was merged into the 2.7 branch.

Discussion
----------

[VarDumper] Add VarDumperTestCase and related trait

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

This allows writing assertions that use the dump of a variable for comparison.

Commits
-------

57da9ae [VarDumper] Add VarDumperTestCase and related trait
2015-03-30 17:41:11 +02:00
Fabien Potencier bdb50965f0 feature #14058 [VarDumper] Add filters to casters (nicolas-grekas)
This PR was merged into the 2.7 branch.

Discussion
----------

[VarDumper] Add filters to casters

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

Commits
-------

84a80d1 [VarDumper] Add filters to casters
2015-03-30 17:39:35 +02:00
Fabien Potencier 2d9cc133ff minor #14090 CS: Unary operators should be placed adjacent to their operands (keradus)
This PR was merged into the 2.3 branch.

Discussion
----------

CS: Unary operators should be placed adjacent to their operands

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | ?
| Fixed tickets | N/A
| License       | MIT
| Doc PR        | N/A

Update before upcoming changes on PHP CS Fixer 1.7

To keep fabbot.io happy ;)

Commits
-------

2367f4a CS: Unary operators should be placed adjacent to their operands
2015-03-30 17:33:35 +02:00
Fabien Potencier 6e91981549 minor #14089 CS: Binary operators should be arounded by at least one space (keradus)
This PR was merged into the 2.3 branch.

Discussion
----------

CS: Binary operators should be arounded by at least one space

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | ?
| Fixed tickets | N/A
| License       | MIT
| Doc PR        | N/A

Update before upcoming changes on PHP CS Fixer 1.7

To keep fabbot.io happy ;)

Commits
-------

ec2cec6 CS: Binary operators should be arounded by at least one space
2015-03-30 17:29:33 +02:00
Fabien Potencier 2533d8fe7b feature #14003 [2.7][Translation][Profiler] Added a Translation profiler. (aitboudad)
This PR was merged into the 2.7 branch.

Discussion
----------

[2.7][Translation][Profiler] Added a Translation profiler.

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Fixed tickets  | ~
| Tests pass?   | yes
| License       | MIT

- [x] tests

![selection_005](https://cloud.githubusercontent.com/assets/1753742/6762405/7e355396-cf57-11e4-9836-cdaebb541d13.png)

![selection_006](https://cloud.githubusercontent.com/assets/1753742/6762407/91dc9422-cf57-11e4-8f6f-f89c9d067b03.png)

Commits
-------

c923b2a [Translation][Profiler] Added a Translation profiler.
2015-03-30 17:25:15 +02:00
Fabien Potencier ffd76e1777 minor #14092 [Validator] Add missing pt_BR translations (andreia)
This PR was submitted for the 2.7 branch but it was merged into the 2.3 branch instead (closes #14092).

Discussion
----------

[Validator] Add missing pt_BR translations

| Q             | A
| ------------- | ---
| Fixed tickets |
| License       | MIT

Commits
-------

d748374 [Validator] Add missing pt_BR translations
2015-03-30 17:08:09 +02:00
Andreia Bohner d748374c5c [Validator] Add missing pt_BR translations 2015-03-30 17:07:31 +02:00
Fabien Potencier a49c4328e8 minor #14103 [PhpunitBridge] Trim final stop from deprecation message (WouterJ)
This PR was merged into the 2.7 branch.

Discussion
----------

[PhpunitBridge] Trim final stop from deprecation message

**Before**
```
The "_method" requirement is deprecated since version 2.2 and will be removed in 3.0. Use the
setMethods() method instead or the "methods" option in the route definition.: 18x
```

**After**
```
The "_method" requirement is deprecated since version 2.2 and will be removed in 3.0. Use the
setMethods() method instead or the "methods" option in the route definition: 18x
```

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

Commits
-------

98f3ba9 Trim final stop from deprecation message
2015-03-30 16:55:02 +02:00
Abdellatif Ait boudad c923b2ab88 [Translation][Profiler] Added a Translation profiler. 2015-03-30 11:48:49 +01:00
Nicolas Grekas 007386c5f2 Merge branch '2.6' into 2.7
* 2.6:
  remove usage of deprecated class

Conflicts:
	src/Symfony/Bridge/Twig/composer.json
2015-03-30 10:18:42 +02:00