From 638ce847b35c7d431bda3fb77babf81687323137 Mon Sep 17 00:00:00 2001 From: Laurent Ghirardotti Date: Fri, 26 Sep 2014 12:51:50 +0200 Subject: [PATCH] [Doc] Use Markdown syntax highlighting --- UPGRADE-2.1.md | 200 +++++++++--------- UPGRADE-2.2.md | 88 ++++---- UPGRADE-2.3.md | 36 ++-- UPGRADE-3.0.md | 74 ++++--- src/Symfony/Component/ClassLoader/README.md | 48 +++-- src/Symfony/Component/Console/README.md | 40 ++-- src/Symfony/Component/CssSelector/README.md | 16 +- src/Symfony/Component/Debug/README.md | 26 ++- .../Component/DependencyInjection/README.md | 74 ++++--- src/Symfony/Component/DomCrawler/README.md | 20 +- .../Component/EventDispatcher/README.md | 16 +- src/Symfony/Component/Finder/README.md | 41 ++-- .../Component/HttpFoundation/README.md | 32 +-- src/Symfony/Component/HttpKernel/README.md | 80 ++++--- .../Component/OptionsResolver/README.md | 134 ++++++------ src/Symfony/Component/Process/README.md | 38 ++-- src/Symfony/Component/Routing/CHANGELOG.md | 24 ++- src/Symfony/Component/Routing/README.md | 26 +-- src/Symfony/Component/Translation/README.md | 22 +- src/Symfony/Component/Validator/README.md | 110 +++++----- src/Symfony/Component/Yaml/README.md | 8 +- 21 files changed, 626 insertions(+), 527 deletions(-) diff --git a/UPGRADE-2.1.md b/UPGRADE-2.1.md index ecb2a18af8..64f98af7b8 100644 --- a/UPGRADE-2.1.md +++ b/UPGRADE-2.1.md @@ -40,7 +40,7 @@ Before: - ``` + ```yaml framework: session: default_locale: fr @@ -48,7 +48,7 @@ After: - ``` + ```yaml framework: default_locale: fr ``` @@ -74,10 +74,10 @@ ##### Simulate old behavior You can simulate that the locale for the user is still stored in the session by - registering a listener that looks like the following if the parameter which + registering a listener that looks like the following if the parameter which handles the locale value in the request is `_locale`: - ``` + ```php namespace XXX; use Symfony\Component\HttpKernel\Event\GetResponseEvent; @@ -138,7 +138,7 @@ Before: - ``` + ```php class User implements UserInterface { // ... @@ -149,7 +149,7 @@ After: - ``` + ```php class User implements UserInterface, EquatableInterface { // ... @@ -165,13 +165,13 @@ Before: - ``` yaml + ```yaml security: factories: - "%kernel.root_dir%/../src/Acme/DemoBundle/Resources/config/security_factories.yml" ``` - ``` yaml + ```yaml # src/Acme/DemoBundle/Resources/config/security_factories.yml services: security.authentication.factory.custom: @@ -182,7 +182,7 @@ After: - ``` + ```php namespace Acme\DemoBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; @@ -212,7 +212,7 @@ Before: - ``` yaml + ```yaml security: providers: my_chain_provider: @@ -225,7 +225,7 @@ After: - ``` yaml + ```yaml security: providers: my_chain_provider: @@ -245,14 +245,14 @@ Before: - ``` + ```php use Symfony\Bundle\SecurityBundle\Validator\Constraint\UserPassword; use Symfony\Bundle\SecurityBundle\Validator\Constraint as SecurityAssert; ``` After: - ``` + ```php use Symfony\Component\Security\Core\Validator\Constraint\UserPassword; use Symfony\Component\Security\Core\Validator\Constraint as SecurityAssert; ``` @@ -270,7 +270,7 @@ Before: - ``` + ```php use Symfony\Component\Form\FormBuilder; public function buildForm(FormBuilder $builder, array $options) @@ -278,7 +278,7 @@ After: - ``` + ```php use Symfony\Component\Form\FormBuilderInterface; public function buildForm(FormBuilderInterface $builder, array $options) @@ -301,7 +301,7 @@ Before: - ``` + ```php public function getParent(array $options) { return 'field'; @@ -310,7 +310,7 @@ After: - ``` + ```php public function getParent() { return 'form'; @@ -333,7 +333,7 @@ Before: - ``` + ```php public function getParent(array $options) { return $options['expanded'] ? 'form' : 'field'; @@ -342,7 +342,7 @@ After: - ``` + ```php use Symfony\Component\OptionsResolver\OptionsResolverInterface; use Symfony\Component\OptionsResolver\Options; @@ -374,7 +374,7 @@ Form mapped to an instance of `Person`: - ``` + ```php use Symfony\Component\OptionsResolver\OptionsResolverInterface; public function setDefaultOptions(OptionsResolverInterface $resolver) @@ -399,7 +399,7 @@ Before: - ``` + ```php $builder->add('name', 'text', array( 'property_path' => 'address.street', )); @@ -407,7 +407,7 @@ After (if the address object is an array): - ``` + ```php $builder->add('name', 'text', array( 'property_path' => 'address[street]', )); @@ -427,7 +427,7 @@ underscores wherever you specify a value for the field's "prototype_name" option. - ``` + ```php $builder->add('tags', 'collection', array('prototype_name' => '__proto__')); // results in the name "__proto__" in the template @@ -455,7 +455,7 @@ Before: - ``` + ```jinja {% block url_widget %} {% spaceless %} {% set type = type|default('url') %} @@ -466,7 +466,7 @@ After: - ``` + ```jinja {% block url_widget %} {% spaceless %} {% set type = type|default('url') %} @@ -482,7 +482,7 @@ Before: - ``` + ```jinja {% block form_errors %} {% spaceless %} ... form code ... @@ -498,7 +498,7 @@ After: - ``` + ```jinja {% block form_errors %} {% spaceless %} {% if compound %} @@ -526,13 +526,13 @@ * In the choice field type's template, the `_form_is_choice_selected` method used to identify a selected choice has been replaced with the `selectedchoice` - filter. Similarly, the `_form_is_choice_group` method used to check if a - choice is grouped has been removed and can be checked with the `iterable` + filter. Similarly, the `_form_is_choice_group` method used to check if a + choice is grouped has been removed and can be checked with the `iterable` test. Before: - ``` + ```jinja {% for choice, label in choices %} {% if _form_is_choice_group(label) %} @@ -550,7 +550,7 @@ After: - ``` + ```jinja {% for label, choice in choices %} {% if choice is iterable %} @@ -571,7 +571,7 @@ accommodate those cases when the `label` option has not been explicitly set. - ``` + ```jinja {% block form_label %} {% if label is empty %} {% set label = name|humanize %} @@ -588,7 +588,7 @@ Before: - ``` + ```jinja {% block _author_tags_0_label %} {# ... #} {% endblock %} @@ -600,7 +600,7 @@ After: - ``` + ```jinja {% block _author_tags_entry_label %} {# ... #} {% endblock %} @@ -612,13 +612,13 @@ Before: - ``` + ```php renderBlock('widget_attributes') ?> ``` After: - ``` + ```php block($form, 'widget_attributes') ?> ``` @@ -631,13 +631,13 @@ Before: - ``` + ```php $form = $factory->createNamed('text', 'firstName'); ``` After: - ``` + ```php $form = $factory->createNamed('firstName', 'text'); ``` @@ -648,7 +648,7 @@ Before: - ``` + ```php class MyChoiceList extends ArrayChoiceList { protected function load() @@ -664,7 +664,7 @@ After: - ``` + ```php class MyChoiceList extends SimpleChoiceList { public function __construct() @@ -680,7 +680,7 @@ accessed for the first time -- you can extend `LazyChoiceList` instead and load the choices by overriding `loadChoiceList()`. - ``` + ```php class MyChoiceList extends LazyChoiceList { protected function loadChoiceList() @@ -705,13 +705,13 @@ Before: - ``` + ```jinja {{ form_label(form.name, 'Your Name', { 'attr': {'class': 'foo'} }) }} ``` After: - ``` + ```jinja {{ form_label(form.name, 'Your Name', { 'label_attr': {'class': 'foo'} }) }} ``` @@ -751,7 +751,7 @@ Before: - ``` + ```php public function getDefaultOptions(array $options) { return array( @@ -769,7 +769,7 @@ After: - ``` + ```php public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( @@ -786,7 +786,7 @@ Before: - ``` + ```php public function getDefaultOptions(array $options) { $defaultOptions = array(); @@ -801,7 +801,7 @@ After: - ``` + ```php public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( @@ -832,13 +832,13 @@ Before: - ``` + ```php $builder->appendClientTransformer(new MyTransformer()); ``` After: - ``` + ```php $builder->addViewTransformer(new MyTransformer()); ``` @@ -857,7 +857,7 @@ Before: - ``` + ```php $builder->addListener(FormEvents::BIND_CLIENT_DATA, function (FilterDataEvent $event) { // ... }); @@ -865,7 +865,7 @@ After: - ``` + ```php $builder->addListener(FormEvents::PRE_BIND, function (FormEvent $event) { // ... }); @@ -886,7 +886,7 @@ Before: - ``` + ```php public function guessMinLength($class, $property) { if (/* condition */) { @@ -897,7 +897,7 @@ After: - ``` + ```php public function guessPattern($class, $property) { if (/* condition */) { @@ -914,7 +914,7 @@ Before: - ``` + ```php $builder->add('termsAccepted', 'checkbox', array( 'property_path' => false, )); @@ -922,7 +922,7 @@ After: - ``` + ```php $builder->add('termsAccepted', 'checkbox', array( 'mapped' => false, )); @@ -944,13 +944,13 @@ Before: - ``` + ```php $form->getErrorBubbling() ``` After: - ``` + ```php $form->getConfig()->getErrorBubbling(); ``` @@ -962,13 +962,13 @@ Before: - ``` + ```php if ($form->hasChildren()) { ``` After: - ``` + ```php if (count($form) > 0) { ``` @@ -976,13 +976,13 @@ Before: - ``` + ```php $form->bindRequest($request); ``` After: - ``` + ```php $form->bind($request); ``` @@ -992,7 +992,7 @@ Before: - ``` + ```php $builder->add('name', 'text', array( 'validation_constraint' => new NotBlank(), )); @@ -1000,7 +1000,7 @@ After: - ``` + ```php $builder->add('name', 'text', array( 'constraints' => new NotBlank(), )); @@ -1008,7 +1008,7 @@ Unlike previously, you can also pass a list of constraints now: - ``` + ```php $builder->add('name', 'text', array( 'constraints' => array( new NotBlank(), @@ -1021,7 +1021,7 @@ to the validated group! So if you validate a form in group "Custom" and previously did: - ``` + ```php $builder->add('name', 'text', array( 'validation_constraint' => new NotBlank(), )); @@ -1029,7 +1029,7 @@ Then you need to add the constraint to the group "Custom" now: - ``` + ```php $builder->add('name', 'text', array( 'constraints' => new NotBlank(array('groups' => 'Custom')), )); @@ -1041,7 +1041,7 @@ Before: - ``` + ```php $builder->add('scheduledFor', 'date', array( 'data_timezone' => 'UTC', 'user_timezone' => 'America/New_York', @@ -1050,7 +1050,7 @@ After: - ``` + ```php $builder->add('scheduledFor', 'date', array( 'model_timezone' => 'UTC', 'view_timezone' => 'America/New_York', @@ -1063,13 +1063,13 @@ Before: - ``` + ```php $this->get('form.factory')->addType(new MyFormType()); ``` After: - ``` + ```php $registry = $this->get('form.registry'); $registry->addType($registry->resolveType(new MyFormType())); @@ -1098,14 +1098,14 @@ Before: - ``` + ```php $view->set('help', 'A text longer than six characters'); $view->set('error_class', 'max_length_error'); ``` After: - ``` + ```php $view->vars = array_replace($view->vars, array( 'help' => 'A text longer than six characters', 'error_class' => 'max_length_error', @@ -1114,25 +1114,25 @@ Before: - ``` + ```php echo $view->get('error_class'); ``` After: - ``` + ```php echo $view->vars['error_class']; ``` Before: - ``` + ```php if ($view->hasChildren()) { ... ``` After: - ``` + ```php if (count($view->children)) { ... ``` @@ -1147,7 +1147,7 @@ Before: - ``` + ```php public function isValid($value, Constraint $constraint) { // ... @@ -1163,7 +1163,7 @@ After: - ``` + ```php public function isValid($value, Constraint $constraint) { // ... @@ -1185,7 +1185,7 @@ Before: - ``` + ```php public function isPropertyValid(ExecutionContext $context) { // ... @@ -1197,7 +1197,7 @@ After: - ``` + ```php public function isPropertyValid(ExecutionContext $context) { // ... @@ -1216,7 +1216,7 @@ Before: - ``` + ```php public function isValid($value, Constraint $constraint) { // ... @@ -1232,7 +1232,7 @@ After: - ``` + ```php public function validate($value, Constraint $constraint) { // ... @@ -1259,14 +1259,14 @@ Before: - ``` + ```php /** @Assert\Valid */ private $recursiveCollection; ``` After: - ``` + ```php /** @Assert\Valid(deep = true) */ private $recursiveCollection; ``` @@ -1276,28 +1276,28 @@ Before: - ``` + ```php /** @Assert\Size(min = 2, max = 16) */ private $numberOfCpus; ``` After: - ``` + ```php /** @Assert\Range(min = 2, max = 16) */ private $numberOfCpus; ``` Before: - ``` + ```php /** @Assert\Min(2) */ private $numberOfCpus; ``` After: - ``` + ```php /** @Assert\Range(min = 2) */ private $numberOfCpus; ``` @@ -1307,14 +1307,14 @@ Before: - ``` + ```php /** @Assert\MinLength(8) */ private $password; ``` After: - ``` + ```php /** @Assert\Length(min = 8) */ private $password; ``` @@ -1325,14 +1325,14 @@ Before: - ``` + ```php $validator = ValidatorFactory::buildDefault(array('path/to/mapping.xml')) ->getValidator(); ``` After: - ``` + ```php $validator = Validation::createValidatorBuilder() ->addXmlMapping('path/to/mapping.xml') ->getValidator(); @@ -1349,7 +1349,7 @@ Before: - ``` + ```jinja {% if app.session.hasFlash('notice') %}
{{ app.session.getFlash('notice') }} @@ -1358,7 +1358,7 @@ ``` After: - ``` + ```jinja {% for flashMessage in app.session.flashbag.get('notice') %}
{{ flashMessage }} @@ -1368,7 +1368,7 @@ You can process all flash messages in a single loop with: - ``` + ```jinja {% for type, flashMessages in app.session.flashbag.all() %} {% for flashMessage in flashMessages %}
@@ -1391,7 +1391,7 @@ * The `item` element is now converted to an array when deserializing XML. - ``` xml + ```xml <![CDATA[title1]]><![CDATA[title2]]> @@ -1433,7 +1433,7 @@ Before: - ``` + ```yaml framework: session: lifetime: 3600 @@ -1445,7 +1445,7 @@ After: - ``` + ```yaml framework: session: cookie_lifetime: 3600 @@ -1457,7 +1457,7 @@ Added `handler_id`, defaults to `session.handler.native_file`. - ``` + ```yaml framework: session: storage_id: session.storage.native @@ -1466,7 +1466,7 @@ Added `handler_id`, defaults to `session.handler.native_file`. To use mock session storage use the following. `handler_id` is irrelevant in this context. - ``` + ```yaml framework: session: storage_id: session.storage.mock_file diff --git a/UPGRADE-2.2.md b/UPGRADE-2.2.md index 5960d998da..f203b208fd 100644 --- a/UPGRADE-2.2.md +++ b/UPGRADE-2.2.md @@ -7,13 +7,13 @@ Before: - ``` + ```jinja {% render 'BlogBundle:Post:list' with { 'limit': 2 }, { 'alt': 'BlogBundle:Post:error' } %} ``` After: - ``` + ```jinja {% render controller('BlogBundle:Post:list', { 'limit': 2 }), { 'alt': 'BlogBundle:Post:error' } %} {# Or: #} {{ render(controller('BlogBundle:Post:list', { 'limit': 2 }), { 'alt': 'BlogBundle:Post:error'}) }} @@ -29,7 +29,7 @@ Before: - ``` + ```jinja {% render 'BlogBundle:Post:list' with { 'limit': 2 }, {'standalone': true} %} {% render 'BlogBundle:Post:list' with { 'limit': 2 }, {'standalone': false} %} {% render 'BlogBundle:Post:list' with { 'limit': 2 }, {'standalone': 'js'} %} @@ -37,7 +37,7 @@ After: - ``` + ```jinja {{ render(controller('BlogBundle:Post:list', { 'limit': 2 }), { 'strategy': 'esi'}) }} {{ render(controller('BlogBundle:Post:list', { 'limit': 2 }), { 'strategy': 'inline'}) }} {{ render(controller('BlogBundle:Post:list', { 'limit': 2 }), { 'strategy': 'hinclude'}) }} @@ -65,7 +65,7 @@ You should now use the `AcceptHeader` class which give you fluent methods to parse request accept-* headers. Some examples: - ``` + ```php $accept = AcceptHeader::fromString($request->headers->get('Accept')); if ($accept->has('text/html') { $item = $accept->get('html'); @@ -95,7 +95,7 @@ Before: - ``` + ```jinja {{ error.messagePluralization is null ? error.messageTemplate|trans(error.messageParameters, 'validators') @@ -105,7 +105,7 @@ After: - ``` + ```jinja {{ error.message }} ``` @@ -117,7 +117,7 @@ Before: - ``` + ```php use Symfony\Component\Form\Extensions\Core\DataMapper\PropertyPathMapper; class CustomMapper extends PropertyPathMapper @@ -133,7 +133,7 @@ After: - ``` + ```php use Symfony\Component\Form\Extensions\Core\DataMapper\PropertyPathMapper; class CustomMapper extends PropertyPathMapper @@ -163,7 +163,7 @@ Before: - ``` + ```php use Symfony\Component\Form\Util\PropertyPath; use Symfony\Component\Form\Util\PropertyPathBuilder; use Symfony\Component\Form\Util\PropertyPathInterface; @@ -176,7 +176,7 @@ After: - ``` + ```php use Symfony\Component\PropertyAccess\PropertyPath; use Symfony\Component\PropertyAccess\PropertyPathBuilder; use Symfony\Component\PropertyAccess\PropertyPathInterface; @@ -192,7 +192,7 @@ Before: - ``` + ```php use Symfony\Component\Form\Util\FormUtil; $singular = FormUtil::singularify($plural); @@ -200,7 +200,7 @@ After: - ``` + ```php use Symfony\Component\PropertyAccess\StringUtil; $singular = StringUtil::singularify($plural); @@ -211,7 +211,7 @@ Before: - ``` + ```php use Symfony\Component\Form\Util\PropertyPath; $propertyPath = new PropertyPath('some.path'); @@ -222,7 +222,7 @@ After (alternative 1): - ``` + ```php use Symfony\Component\PropertyAccess\PropertyAccess; $propertyAccessor = PropertyAccess::getPropertyAccessor(); @@ -233,7 +233,7 @@ After (alternative 2): - ``` + ```php use Symfony\Component\PropertyAccess\PropertyAccess; use Symfony\Component\PropertyAccess\PropertyPath; @@ -253,7 +253,7 @@ Before: - ``` + ```php $rootCollection = new RouteCollection(); $subCollection = new RouteCollection(); $rootCollection->addCollection($subCollection); @@ -262,7 +262,7 @@ After: - ``` + ```php $rootCollection = new RouteCollection(); $subCollection = new RouteCollection(); $subCollection->add('foo', new Route('/foo')); @@ -272,7 +272,7 @@ Also one must call `addCollection` from the bottom to the top hierarchy. So the correct sequence is the following (and not the reverse): - ``` + ```php $childCollection->addCollection($grandchildCollection); $rootCollection->addCollection($childCollection); ``` @@ -298,7 +298,7 @@ use-case instead. Before: `$parentCollection->addCollection($collection, '/prefix', array(...), array(...))` After: - ``` + ```php $collection->addPrefix('/prefix', array(...), array(...)); $parentCollection->addCollection($collection); ``` @@ -312,7 +312,7 @@ Before: - ``` + ```php use Symfony\Component\Validator\ExecutionContext; public function validateCustomLogic(ExecutionContext $context) @@ -320,7 +320,7 @@ After: - ``` + ```php use Symfony\Component\Validator\ExecutionContextInterface; public function validateCustomLogic(ExecutionContextInterface $context) @@ -331,7 +331,7 @@ Before: - ``` + ```php use Symfony\Component\Validator\ConstraintValidatorInterface; use Symfony\Component\Validator\ExecutionContext; @@ -346,7 +346,7 @@ After: - ``` + ```php use Symfony\Component\Validator\ConstraintValidatorInterface; use Symfony\Component\Validator\ExecutionContextInterface; @@ -391,7 +391,7 @@ Before: - ``` + ```php use Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface; class MyMetadataFactory implements ClassMetadataFactoryInterface @@ -405,7 +405,7 @@ After: - ``` + ```php use Symfony\Component\Validator\MetadataFactoryInterface; use Symfony\Component\Validator\Exception\NoSuchMetadataException; @@ -432,14 +432,14 @@ Before: - ``` + ```php $metadataFactory = $validator->getMetadataFactory(); $metadata = $metadataFactory->getClassMetadata('Vendor\MyClass'); ``` After: - ``` + ```php $metadataFactory = $validator->getMetadataFactory(); $metadata = $metadataFactory->getMetadataFor('Vendor\MyClass'); ``` @@ -451,7 +451,7 @@ Before: - ``` + ```php use Symfony\Component\Validator\ExecutionContext; public function validateCustomLogic(ExecutionContext $context) @@ -471,7 +471,7 @@ After: - ``` + ```php use Symfony\Component\Validator\ExecutionContextInterface; public function validateCustomLogic(ExecutionContextInterface $context) @@ -488,7 +488,7 @@ Before: - ``` + ```php use Symfony\Component\Validator\ExecutionContext; public function validateCustomLogic(ExecutionContext $context) @@ -501,7 +501,7 @@ After: - ``` + ```php use Symfony\Component\Validator\ExecutionContextInterface; public function validateCustomLogic(ExecutionContextInterface $context) @@ -519,7 +519,7 @@ Before: - ``` + ```php use Symfony\Component\Validator\ExecutionContext; public function validateCustomLogic(ExecutionContext $context) @@ -534,7 +534,7 @@ After: - ``` + ```php use Symfony\Component\Validator\ExecutionContextInterface; public function validateCustomLogic(ExecutionContextInterface $context) @@ -553,20 +553,20 @@ Before: - ``` + ```php render('BlogBundle:Post:list', array('limit' => 2), array('alt' => 'BlogBundle:Post:error')) ?> ``` After: - ``` + ```php render($view['router']->generate('post_list', array('limit' => 2)), array('alt' => 'BlogBundle:Post:error')) ?> ``` where `post_list` is the route name for the `BlogBundle:Post:list` controller, or if you don't want to create a route: - ``` + ```php render(new ControllerReference('BlogBundle:Post:list', array('limit' => 2)), array('alt' => 'BlogBundle:Post:error')) ?> ``` @@ -577,7 +577,7 @@ Before: - ``` + ```yaml # app/config/config.yml framework: trust_proxy_headers: false @@ -585,7 +585,7 @@ After: - ``` + ```yaml # app/config/config.yml framework: trusted_proxies: ['127.0.0.1', '10.0.0.1'] # a list of proxy IPs you trust @@ -598,13 +598,13 @@ Before: - ``` + ```php use Symfony\Component\Security\Core\Validator\Constraint\UserPassword; ``` After: (note the `s` at the end of `Constraint`) - ``` + ```php use Symfony\Component\Security\Core\Validator\Constraints\UserPassword; ``` @@ -612,7 +612,7 @@ ``service`` option that allows to specify a custom validator service name in order to validate the current logged-in user's password. - ``` + ```php use Symfony\Component\Security\Core\Validator\Constraints\UserPassword; $constraint = new UserPassword(array( @@ -628,14 +628,14 @@ Before: - ``` + ```php use Symfony\Component\Security\Core\Validator\Constraint\UserPassword; use Symfony\Component\Security\Core\Validator\Constraint\UserPasswordValidator; ``` After: - ``` + ```php use Symfony\Component\Security\Core\Validator\Constraints\UserPassword; use Symfony\Component\Security\Core\Validator\Constraints\UserPasswordValidator; ``` diff --git a/UPGRADE-2.3.md b/UPGRADE-2.3.md index f03a76f7b6..3b191fae95 100644 --- a/UPGRADE-2.3.md +++ b/UPGRADE-2.3.md @@ -41,7 +41,7 @@ Form Before: - ``` + ```php use Symfony\Component\Form\DataMapperInterface; class MyDataMapper @@ -60,7 +60,7 @@ Form After: - ``` + ```php use Symfony\Component\Form\DataMapperInterface; class MyDataMapper @@ -84,7 +84,7 @@ Form Before: - ``` + ```php use Symfony\Component\Form\Util\VirtualFormAwareIterator; public function mapFormsToData(array $forms, $data) @@ -101,7 +101,7 @@ Form After: - ``` + ```php public function mapFormsToData($forms, $data) { foreach ($forms as $form) { @@ -121,7 +121,7 @@ Form Before: - ``` + ```php $form = $factory->create('form'); $form->add($factory->createNamed('field', 'text')); ``` @@ -135,7 +135,7 @@ Form After (Alternative 1): - ``` + ```php $form = $factory->create('form'); $form->add($factory->createNamed('field', 'text', array(), array( 'auto_initialize' => false, @@ -147,7 +147,7 @@ Form After (Alternative 2): - ``` + ```php $builder = $factory->createBuilder('form'); $builder->add($factory->createBuilder('field', 'text')); $form = $builder->getForm(); @@ -157,14 +157,14 @@ Form After (Alternative 3): - ``` + ```php $form = $factory->create('form'); $form->add('field', 'text'); ``` After (Alternative 4): - ``` + ```php $builder = $factory->createBuilder('form'); $builder->add('field', 'text'); $form = $builder->getForm(); @@ -180,7 +180,7 @@ Form Before: - ``` + ```php $builder->add('field', 'text', array( 'data' => $defaultData ?: null, )); @@ -188,7 +188,7 @@ Form After: - ``` + ```php $options = array(); if ($defaultData) { $options['data'] = $defaultData; @@ -203,7 +203,7 @@ PropertyAccess even if a non-public match was found. This means that the property "author" in the following class will now correctly be found: - ``` + ```php class Article { public $author; @@ -224,7 +224,7 @@ PropertyAccess Before: - ``` + ```php use Symfony\Component\PropertyAccess\Exception\PropertyAccessDeniedException; use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException; @@ -239,7 +239,7 @@ PropertyAccess After: - ``` + ```php use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException; try { @@ -257,7 +257,7 @@ DomCrawler Before: - ``` + ```php $data = $crawler->each(function ($node, $i) { return $node->nodeValue; }); @@ -265,7 +265,7 @@ DomCrawler After: - ``` + ```php $data = $crawler->each(function ($crawler, $i) { return $crawler->text(); }); @@ -280,13 +280,13 @@ Console Before: - ``` + ```php if (OutputInterface::VERBOSITY_VERBOSE === $output->getVerbosity()) { ... } ``` After: - ``` + ```php if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) { ... } ``` diff --git a/UPGRADE-3.0.md b/UPGRADE-3.0.md index dd647eaf9e..ed3c6dbb13 100644 --- a/UPGRADE-3.0.md +++ b/UPGRADE-3.0.md @@ -25,13 +25,13 @@ UPGRADE FROM 2.x to 3.0 Before: - ``` + ```php $form->bind(array(...)); ``` After: - ``` + ```php $form->submit(array(...)); ``` @@ -42,7 +42,7 @@ UPGRADE FROM 2.x to 3.0 Before: - ``` + ```php if ('POST' === $request->getMethod()) { $form->bind($request); @@ -54,7 +54,7 @@ UPGRADE FROM 2.x to 3.0 After: - ``` + ```php $form->handleRequest($request); if ($form->isValid()) { @@ -65,7 +65,7 @@ UPGRADE FROM 2.x to 3.0 If you want to test whether the form was submitted separately, you can use the method `isSubmitted()`: - ``` + ```php $form->handleRequest($request); if ($form->isSubmitted()) { @@ -82,7 +82,7 @@ UPGRADE FROM 2.x to 3.0 Before: - ``` + ```php $builder->addEventListener(FormEvents::PRE_BIND, function (FormEvent $event) { // ... }); @@ -90,7 +90,7 @@ UPGRADE FROM 2.x to 3.0 After: - ``` + ```php $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) { // ... }); @@ -100,7 +100,7 @@ UPGRADE FROM 2.x to 3.0 Before: - ``` + ```php $builder->add('address', 'form', array( 'virtual' => true, )); @@ -108,7 +108,7 @@ UPGRADE FROM 2.x to 3.0 After: - ``` + ```php $builder->add('address', 'form', array( 'inherit_data' => true, )); @@ -118,7 +118,7 @@ UPGRADE FROM 2.x to 3.0 Before: - ``` + ```php use Symfony\Component\Form\Util\VirtualFormAwareIterator; $iterator = new VirtualFormAwareIterator($forms); @@ -126,17 +126,17 @@ UPGRADE FROM 2.x to 3.0 After: - ``` + ```php use Symfony\Component\Form\Util\InheritDataAwareIterator; $iterator = new InheritDataAwareIterator($forms); ``` * The `TypeTestCase` class was moved from the `Symfony\Component\Form\Tests\Extension\Core\Type` namespace to the `Symfony\Component\Form\Test` namespace. - + Before: - ``` + ```php use Symfony\Component\Form\Tests\Extension\Core\Type\TypeTestCase class MyTypeTest extends TypeTestCase @@ -147,7 +147,7 @@ UPGRADE FROM 2.x to 3.0 After: - ``` + ```php use Symfony\Component\Form\Test\TypeTestCase; class MyTypeTest extends TypeTestCase @@ -166,7 +166,7 @@ UPGRADE FROM 2.x to 3.0 Before: - ``` + ```php
enctype($form) ?>> ...
@@ -174,7 +174,7 @@ UPGRADE FROM 2.x to 3.0 After: - ``` + ```php start($form) ?> ... end($form) ?> @@ -186,7 +186,7 @@ UPGRADE FROM 2.x to 3.0 Alternative 1: - ``` + ```php $form = $this->createForm('my_form', $formData, array( 'method' => 'PUT', 'action' => $this->generateUrl('target_route'), @@ -195,7 +195,7 @@ UPGRADE FROM 2.x to 3.0 Alternative 2: - ``` + ```php $form = $this->createFormBuilder($formData) // ... ->setMethod('PUT') @@ -205,7 +205,7 @@ UPGRADE FROM 2.x to 3.0 It is also possible to override the method and the action in the template: - ``` + ```php start($form, array('method' => 'GET', 'action' => 'http://example.com')) ?> ... end($form) ?> @@ -245,7 +245,7 @@ UPGRADE FROM 2.x to 3.0 * The Locale component was removed and replaced by the Intl component. Instead of the methods in `Symfony\Component\Locale\Locale`, you should use these equivalent methods in `Symfony\Component\Intl\Intl` now: - + * `Locale::getDisplayCountries()` -> `Intl::getRegionBundle()->getCountryNames()` * `Locale::getCountries()` -> `array_keys(Intl::getRegionBundle()->getCountryNames())` * `Locale::getDisplayLanguages()` -> `Intl::getLanguageBundle()->getLanguageNames()` @@ -259,7 +259,7 @@ UPGRADE FROM 2.x to 3.0 Before: - ``` + ```php use Symfony\Component\PropertyAccess\PropertyAccess; $accessor = PropertyAccess::getPropertyAccessor(); @@ -267,7 +267,7 @@ UPGRADE FROM 2.x to 3.0 After: - ``` + ```php use Symfony\Component\PropertyAccess\PropertyAccess; $accessor = PropertyAccess::createPropertyAccessor(); @@ -282,17 +282,21 @@ UPGRADE FROM 2.x to 3.0 Before: - ``` + ```yaml article_edit: pattern: /article/{id} requirements: { '_method': 'POST|PUT', '_scheme': 'https', 'id': '\d+' } + ``` + ```xml POST|PUT https \d+ + ``` + ```php $route = new Route(); $route->setPattern('/article/{id}'); $route->setRequirement('_method', 'POST|PUT'); @@ -301,17 +305,21 @@ UPGRADE FROM 2.x to 3.0 After: - ``` + ```yaml article_edit: path: /article/{id} methods: [POST, PUT] schemes: https requirements: { 'id': '\d+' } + ``` + ```xml \d+ + ``` + ```php $route = new Route(); $route->setPath('/article/{id}'); $route->setMethods(array('POST', 'PUT')); @@ -332,7 +340,7 @@ UPGRADE FROM 2.x to 3.0 Before: - ``` + ```php
...
@@ -340,7 +348,7 @@ UPGRADE FROM 2.x to 3.0 After: - ``` + ```jinja {{ form_start(form) }} ... {{ form_end(form) }} @@ -352,7 +360,7 @@ UPGRADE FROM 2.x to 3.0 Alternative 1: - ``` + ```php $form = $this->createForm('my_form', $formData, array( 'method' => 'PUT', 'action' => $this->generateUrl('target_route'), @@ -361,7 +369,7 @@ UPGRADE FROM 2.x to 3.0 Alternative 2: - ``` + ```php $form = $this->createFormBuilder($formData) // ... ->setMethod('PUT') @@ -371,7 +379,7 @@ UPGRADE FROM 2.x to 3.0 It is also possible to override the method and the action in the template: - ``` + ```jinja {{ form_start(form, {'method': 'GET', 'action': 'http://example.com'}) }} ... {{ form_end(form) }} @@ -385,7 +393,7 @@ UPGRADE FROM 2.x to 3.0 Before: - ``` + ```php use Symfony\Component\Validator\Constraints as Assert; /** @@ -399,7 +407,7 @@ UPGRADE FROM 2.x to 3.0 After: - ``` + ```php use Symfony\Component\Validator\Constraints as Assert; /** @@ -417,12 +425,12 @@ UPGRADE FROM 2.x to 3.0 Before: - ``` + ```php Yaml::parse($fileName); ``` After: - ``` + ```php Yaml::parse(file_get_contents($fileName)); ``` diff --git a/src/Symfony/Component/ClassLoader/README.md b/src/Symfony/Component/ClassLoader/README.md index fc222b1c9e..3c785049d2 100644 --- a/src/Symfony/Component/ClassLoader/README.md +++ b/src/Symfony/Component/ClassLoader/README.md @@ -9,51 +9,63 @@ standard or the PEAR naming convention. First, register the autoloader: - require_once __DIR__.'/src/Symfony/Component/ClassLoader/UniversalClassLoader.php'; +```php +require_once __DIR__.'/src/Symfony/Component/ClassLoader/UniversalClassLoader.php'; - use Symfony\Component\ClassLoader\UniversalClassLoader; +use Symfony\Component\ClassLoader\UniversalClassLoader; - $loader = new UniversalClassLoader(); - $loader->register(); +$loader = new UniversalClassLoader(); +$loader->register(); +``` Then, register some namespaces with the `registerNamespace()` method: - $loader->registerNamespace('Symfony', __DIR__.'/src'); - $loader->registerNamespace('Monolog', __DIR__.'/vendor/monolog/src'); +```php +$loader->registerNamespace('Symfony', __DIR__.'/src'); +$loader->registerNamespace('Monolog', __DIR__.'/vendor/monolog/src'); +``` The `registerNamespace()` method takes a namespace prefix and a path where to look for the classes as arguments. You can also register a sub-namespaces: - $loader->registerNamespace('Doctrine\\Common', __DIR__.'/vendor/doctrine-common/lib'); +```php +$loader->registerNamespace('Doctrine\\Common', __DIR__.'/vendor/doctrine-common/lib'); +``` The order of registration is significant and the first registered namespace takes precedence over later registered one. You can also register more than one path for a given namespace: - $loader->registerNamespace('Symfony', array(__DIR__.'/src', __DIR__.'/symfony/src')); +```php +$loader->registerNamespace('Symfony', array(__DIR__.'/src', __DIR__.'/symfony/src')); +``` Alternatively, you can use the `registerNamespaces()` method to register more than one namespace at once: - $loader->registerNamespaces(array( - 'Symfony' => array(__DIR__.'/src', __DIR__.'/symfony/src'), - 'Doctrine\\Common' => __DIR__.'/vendor/doctrine-common/lib', - 'Doctrine' => __DIR__.'/vendor/doctrine/lib', - 'Monolog' => __DIR__.'/vendor/monolog/src', - )); +```php +$loader->registerNamespaces(array( + 'Symfony' => array(__DIR__.'/src', __DIR__.'/symfony/src'), + 'Doctrine\\Common' => __DIR__.'/vendor/doctrine-common/lib', + 'Doctrine' => __DIR__.'/vendor/doctrine/lib', + 'Monolog' => __DIR__.'/vendor/monolog/src', +)); +``` For better performance, you can use the APC based version of the universal class loader: - require_once __DIR__.'/src/Symfony/Component/ClassLoader/UniversalClassLoader.php'; - require_once __DIR__.'/src/Symfony/Component/ClassLoader/ApcUniversalClassLoader.php'; +```php +require_once __DIR__.'/src/Symfony/Component/ClassLoader/UniversalClassLoader.php'; +require_once __DIR__.'/src/Symfony/Component/ClassLoader/ApcUniversalClassLoader.php'; - use Symfony\Component\ClassLoader\ApcUniversalClassLoader; +use Symfony\Component\ClassLoader\ApcUniversalClassLoader; - $loader = new ApcUniversalClassLoader('apc.prefix.'); +$loader = new ApcUniversalClassLoader('apc.prefix.'); +``` Furthermore, the component provides tools to aggregate classes into a single file, which is especially useful to improve performance on servers that do not diff --git a/src/Symfony/Component/Console/README.md b/src/Symfony/Component/Console/README.md index bfc704427c..00722e6fb7 100644 --- a/src/Symfony/Component/Console/README.md +++ b/src/Symfony/Component/Console/README.md @@ -5,10 +5,12 @@ Console eases the creation of beautiful and testable command line interfaces. The Application object manages the CLI application: - use Symfony\Component\Console\Application; +```php +use Symfony\Component\Console\Application; - $console = new Application(); - $console->run(); +$console = new Application(); +$console->run(); +``` The ``run()`` method parses the arguments and options passed on the command line and executes the right command. @@ -16,23 +18,25 @@ line and executes the right command. Registering a new command can easily be done via the ``register()`` method, which returns a ``Command`` instance: - use Symfony\Component\Console\Input\InputInterface; - use Symfony\Component\Console\Input\InputArgument; - use Symfony\Component\Console\Input\InputOption; - use Symfony\Component\Console\Output\OutputInterface; +```php +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; - $console - ->register('ls') - ->setDefinition(array( - new InputArgument('dir', InputArgument::REQUIRED, 'Directory name'), - )) - ->setDescription('Displays the files in the given directory') - ->setCode(function (InputInterface $input, OutputInterface $output) { - $dir = $input->getArgument('dir'); +$console + ->register('ls') + ->setDefinition(array( + new InputArgument('dir', InputArgument::REQUIRED, 'Directory name'), + )) + ->setDescription('Displays the files in the given directory') + ->setCode(function (InputInterface $input, OutputInterface $output) { + $dir = $input->getArgument('dir'); - $output->writeln(sprintf('Dir listing for %s', $dir)); - }) - ; + $output->writeln(sprintf('Dir listing for %s', $dir)); + }) +; +``` You can also register new commands via classes. diff --git a/src/Symfony/Component/CssSelector/README.md b/src/Symfony/Component/CssSelector/README.md index fae1d4bc9a..e0212b1570 100644 --- a/src/Symfony/Component/CssSelector/README.md +++ b/src/Symfony/Component/CssSelector/README.md @@ -6,9 +6,11 @@ CssSelector converts CSS selectors to XPath expressions. The component only goal is to convert CSS selectors to their XPath equivalents: - use Symfony\Component\CssSelector\CssSelector; +```php +use Symfony\Component\CssSelector\CssSelector; - print CssSelector::toXPath('div.item > h4 > a'); +print CssSelector::toXPath('div.item > h4 > a'); +``` HTML and XML are different -------------------------- @@ -18,11 +20,13 @@ default. If you need to use this component with `XML` documents, you have to disable this `HTML` extension. That's because, `HTML` tag & attribute names are always lower-cased, but case-sensitive in `XML`: - // disable `HTML` extension: - CssSelector::disableHtmlExtension(); +```php +// disable `HTML` extension: +CssSelector::disableHtmlExtension(); - // re-enable `HTML` extension: - CssSelector::enableHtmlExtension(); +// re-enable `HTML` extension: +CssSelector::enableHtmlExtension(); +``` When the `HTML` extension is enabled, tag names are lower-cased, attribute names are lower-cased, the following extra pseudo-classes are supported: diff --git a/src/Symfony/Component/Debug/README.md b/src/Symfony/Component/Debug/README.md index dd5bdca6bf..cad3893855 100644 --- a/src/Symfony/Component/Debug/README.md +++ b/src/Symfony/Component/Debug/README.md @@ -6,23 +6,27 @@ Debug provides tools to make debugging easier. Enabling all debug tools is as easy as calling the `enable()` method on the main `Debug` class: - use Symfony\Component\Debug\Debug; +```php +use Symfony\Component\Debug\Debug; - Debug::enable(); +Debug::enable(); +``` You can also use the tools individually: - use Symfony\Component\Debug\ErrorHandler; - use Symfony\Component\Debug\ExceptionHandler; +```php +use Symfony\Component\Debug\ErrorHandler; +use Symfony\Component\Debug\ExceptionHandler; - error_reporting(-1); +error_reporting(-1); - ErrorHandler::register($errorReportingLevel); - if ('cli' !== php_sapi_name()) { - ExceptionHandler::register(); - } elseif (!ini_get('log_errors') || ini_get('error_log')) { - ini_set('display_errors', 1); - } +ErrorHandler::register($errorReportingLevel); +if ('cli' !== php_sapi_name()) { + ExceptionHandler::register(); +} elseif (!ini_get('log_errors') || ini_get('error_log')) { + ini_set('display_errors', 1); +} +``` Note that the `Debug::enable()` call also registers the debug class loader from the Symfony ClassLoader component when available. diff --git a/src/Symfony/Component/DependencyInjection/README.md b/src/Symfony/Component/DependencyInjection/README.md index 29d1cd0aa0..cd170ab09a 100644 --- a/src/Symfony/Component/DependencyInjection/README.md +++ b/src/Symfony/Component/DependencyInjection/README.md @@ -6,45 +6,51 @@ Injection Container. Here is a simple example that shows how to register services and parameters: - use Symfony\Component\DependencyInjection\ContainerBuilder; - use Symfony\Component\DependencyInjection\Reference; +```php +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Reference; - $sc = new ContainerBuilder(); - $sc - ->register('foo', '%foo.class%') - ->addArgument(new Reference('bar')) - ; - $sc->setParameter('foo.class', 'Foo'); +$sc = new ContainerBuilder(); +$sc + ->register('foo', '%foo.class%') + ->addArgument(new Reference('bar')) +; +$sc->setParameter('foo.class', 'Foo'); - $sc->get('foo'); +$sc->get('foo'); +``` Method Calls (Setter Injection): - $sc = new ContainerBuilder(); +```php +$sc = new ContainerBuilder(); - $sc - ->register('bar', '%bar.class%') - ->addMethodCall('setFoo', array(new Reference('foo'))) - ; - $sc->setParameter('bar.class', 'Bar'); +$sc + ->register('bar', '%bar.class%') + ->addMethodCall('setFoo', array(new Reference('foo'))) +; +$sc->setParameter('bar.class', 'Bar'); - $sc->get('bar'); +$sc->get('bar'); +``` Factory Class: If your service is retrieved by calling a static method: - $sc = new ContainerBuilder(); +```php +$sc = new ContainerBuilder(); - $sc - ->register('bar', '%bar.class%') - ->setFactoryClass('%bar.class%') - ->setFactoryMethod('getInstance') - ->addArgument('Aarrg!!!') - ; - $sc->setParameter('bar.class', 'Bar'); +$sc + ->register('bar', '%bar.class%') + ->setFactoryClass('%bar.class%') + ->setFactoryMethod('getInstance') + ->addArgument('Aarrg!!!') +; +$sc->setParameter('bar.class', 'Bar'); - $sc->get('bar'); +$sc->get('bar'); +``` File Include: @@ -52,16 +58,18 @@ For some services, especially those that are difficult or impossible to autoload, you may need the container to include a file before instantiating your class. - $sc = new ContainerBuilder(); +```php +$sc = new ContainerBuilder(); - $sc - ->register('bar', '%bar.class%') - ->setFile('/path/to/file') - ->addArgument('Aarrg!!!') - ; - $sc->setParameter('bar.class', 'Bar'); +$sc + ->register('bar', '%bar.class%') + ->setFile('/path/to/file') + ->addArgument('Aarrg!!!') +; +$sc->setParameter('bar.class', 'Bar'); - $sc->get('bar'); +$sc->get('bar'); +``` Resources --------- diff --git a/src/Symfony/Component/DomCrawler/README.md b/src/Symfony/Component/DomCrawler/README.md index 489e4680cb..646573f4e0 100644 --- a/src/Symfony/Component/DomCrawler/README.md +++ b/src/Symfony/Component/DomCrawler/README.md @@ -5,22 +5,26 @@ DomCrawler eases DOM navigation for HTML and XML documents. If you are familiar with jQuery, DomCrawler is a PHP equivalent: - use Symfony\Component\DomCrawler\Crawler; +```php +use Symfony\Component\DomCrawler\Crawler; - $crawler = new Crawler(); - $crawler->addContent('

Hello World!

'); +$crawler = new Crawler(); +$crawler->addContent('

Hello World!

'); - print $crawler->filterXPath('descendant-or-self::body/p')->text(); +print $crawler->filterXPath('descendant-or-self::body/p')->text(); +``` If you are also using the CssSelector component, you can use CSS Selectors instead of XPath expressions: - use Symfony\Component\DomCrawler\Crawler; +```php +use Symfony\Component\DomCrawler\Crawler; - $crawler = new Crawler(); - $crawler->addContent('

Hello World!

'); +$crawler = new Crawler(); +$crawler->addContent('

Hello World!

'); - print $crawler->filter('body > p')->text(); +print $crawler->filter('body > p')->text(); +``` Resources --------- diff --git a/src/Symfony/Component/EventDispatcher/README.md b/src/Symfony/Component/EventDispatcher/README.md index 22bf74fdc9..c928f13669 100644 --- a/src/Symfony/Component/EventDispatcher/README.md +++ b/src/Symfony/Component/EventDispatcher/README.md @@ -4,16 +4,18 @@ EventDispatcher Component The Symfony2 EventDispatcher component implements the Mediator pattern in a simple and effective way to make your projects truly extensible. - use Symfony\Component\EventDispatcher\EventDispatcher; - use Symfony\Component\EventDispatcher\Event; +```php +use Symfony\Component\EventDispatcher\EventDispatcher; +use Symfony\Component\EventDispatcher\Event; - $dispatcher = new EventDispatcher(); +$dispatcher = new EventDispatcher(); - $dispatcher->addListener('event_name', function (Event $event) { - // ... - }); +$dispatcher->addListener('event_name', function (Event $event) { + // ... +}); - $dispatcher->dispatch('event_name'); +$dispatcher->dispatch('event_name'); +``` Resources --------- diff --git a/src/Symfony/Component/Finder/README.md b/src/Symfony/Component/Finder/README.md index 8494531d21..91092bc9b4 100644 --- a/src/Symfony/Component/Finder/README.md +++ b/src/Symfony/Component/Finder/README.md @@ -3,32 +3,36 @@ Finder Component Finder finds files and directories via an intuitive fluent interface. - use Symfony\Component\Finder\Finder; +```php +use Symfony\Component\Finder\Finder; - $finder = new Finder(); +$finder = new Finder(); - $iterator = $finder - ->files() - ->name('*.php') - ->depth(0) - ->size('>= 1K') - ->in(__DIR__); +$iterator = $finder + ->files() + ->name('*.php') + ->depth(0) + ->size('>= 1K') + ->in(__DIR__); - foreach ($iterator as $file) { - print $file->getRealpath()."\n"; - } +foreach ($iterator as $file) { + print $file->getRealpath()."\n"; +} +``` But you can also use it to find files stored remotely like in this example where we are looking for files on Amazon S3: - $s3 = new \Zend_Service_Amazon_S3($key, $secret); - $s3->registerStreamWrapper("s3"); +```php +$s3 = new \Zend_Service_Amazon_S3($key, $secret); +$s3->registerStreamWrapper("s3"); - $finder = new Finder(); - $finder->name('photos*')->size('< 100K')->date('since 1 hour ago'); - foreach ($finder->in('s3://bucket-name') as $file) { - print $file->getFilename()."\n"; - } +$finder = new Finder(); +$finder->name('photos*')->size('< 100K')->date('since 1 hour ago'); +foreach ($finder->in('s3://bucket-name') as $file) { + print $file->getFilename()."\n"; +} +``` Resources --------- @@ -38,4 +42,3 @@ You can run the unit tests with the following command: $ cd path/to/Symfony/Component/Finder/ $ composer.phar install $ phpunit - diff --git a/src/Symfony/Component/HttpFoundation/README.md b/src/Symfony/Component/HttpFoundation/README.md index ea6a790a64..008c1587f6 100644 --- a/src/Symfony/Component/HttpFoundation/README.md +++ b/src/Symfony/Component/HttpFoundation/README.md @@ -9,21 +9,27 @@ sessions, ... In this example, we get a Request object from the current PHP global variables: - use Symfony\Component\HttpFoundation\Request; - use Symfony\Component\HttpFoundation\Response; +```php +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; - $request = Request::createFromGlobals(); - echo $request->getPathInfo(); +$request = Request::createFromGlobals(); +echo $request->getPathInfo(); +``` You can also create a Request directly -- that's interesting for unit testing: - $request = Request::create('/?foo=bar', 'GET'); - echo $request->getPathInfo(); +```php +$request = Request::create('/?foo=bar', 'GET'); +echo $request->getPathInfo(); +``` And here is how to create and send a Response: - $response = new Response('Not Found', 404, array('Content-Type' => 'text/plain')); - $response->send(); +```php +$response = new Response('Not Found', 404, array('Content-Type' => 'text/plain')); +$response->send(); +``` The Request and the Response classes have many other methods that implement the HTTP specification. @@ -33,10 +39,12 @@ Loading If you are not using Composer but are using PHP 5.3.x, you must add the following to your autoloader: - // SessionHandlerInterface - if (!interface_exists('SessionHandlerInterface')) { - $loader->registerPrefixFallback(__DIR__.'/../vendor/symfony/src/Symfony/Component/HttpFoundation/Resources/stubs'); - } +```php +// SessionHandlerInterface +if (!interface_exists('SessionHandlerInterface')) { + $loader->registerPrefixFallback(__DIR__.'/../vendor/symfony/src/Symfony/Component/HttpFoundation/Resources/stubs'); +} +``` Resources --------- diff --git a/src/Symfony/Component/HttpKernel/README.md b/src/Symfony/Component/HttpKernel/README.md index 7aa0656b3a..8c3c32c244 100644 --- a/src/Symfony/Component/HttpKernel/README.md +++ b/src/Symfony/Component/HttpKernel/README.md @@ -7,17 +7,19 @@ frameworks. ``HttpKernelInterface`` is the core interface of the Symfony2 full-stack framework: - interface HttpKernelInterface - { - /** - * Handles a Request to convert it to a Response. - * - * @param Request $request A Request instance - * - * @return Response A Response instance - */ - function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true); - } +```php +interface HttpKernelInterface +{ + /** + * Handles a Request to convert it to a Response. + * + * @param Request $request A Request instance + * + * @return Response A Response instance + */ + function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true); +} +``` It takes a ``Request`` as an input and should return a ``Response`` as an output. Using this interface makes your code compatible with all frameworks @@ -27,28 +29,30 @@ free. Creating a framework based on the Symfony2 components is really easy. Here is a very simple, but fully-featured framework based on the Symfony2 components: - $routes = new RouteCollection(); - $routes->add('hello', new Route('/hello', array('_controller' => - function (Request $request) { - return new Response(sprintf("Hello %s", $request->get('name'))); - } - ))); +```php +$routes = new RouteCollection(); +$routes->add('hello', new Route('/hello', array('_controller' => + function (Request $request) { + return new Response(sprintf("Hello %s", $request->get('name'))); + } +))); - $request = Request::createFromGlobals(); +$request = Request::createFromGlobals(); - $context = new RequestContext(); - $context->fromRequest($request); +$context = new RequestContext(); +$context->fromRequest($request); - $matcher = new UrlMatcher($routes, $context); +$matcher = new UrlMatcher($routes, $context); - $dispatcher = new EventDispatcher(); - $dispatcher->addSubscriber(new RouterListener($matcher)); +$dispatcher = new EventDispatcher(); +$dispatcher->addSubscriber(new RouterListener($matcher)); - $resolver = new ControllerResolver(); +$resolver = new ControllerResolver(); - $kernel = new HttpKernel($dispatcher, $resolver); +$kernel = new HttpKernel($dispatcher, $resolver); - $kernel->handle($request)->send(); +$kernel->handle($request)->send(); +``` This is all you need to create a flexible framework with the Symfony2 components. @@ -56,24 +60,30 @@ components. Want to add an HTTP reverse proxy and benefit from HTTP caching and Edge Side Includes? - $kernel = new HttpKernel($dispatcher, $resolver); +```php +$kernel = new HttpKernel($dispatcher, $resolver); - $kernel = new HttpCache($kernel, new Store(__DIR__.'/cache')); +$kernel = new HttpCache($kernel, new Store(__DIR__.'/cache')); +``` Want to functional test this small framework? - $client = new Client($kernel); - $crawler = $client->request('GET', '/hello/Fabien'); +```php +$client = new Client($kernel); +$crawler = $client->request('GET', '/hello/Fabien'); - $this->assertEquals('Fabien', $crawler->filter('p > span')->text()); +$this->assertEquals('Fabien', $crawler->filter('p > span')->text()); +``` Want nice error pages instead of ugly PHP exceptions? - $dispatcher->addSubscriber(new ExceptionListener(function (Request $request) { - $msg = 'Something went wrong! ('.$request->get('exception')->getMessage().')'; +```php +$dispatcher->addSubscriber(new ExceptionListener(function (Request $request) { + $msg = 'Something went wrong! ('.$request->get('exception')->getMessage().')'; - return new Response($msg, 500); - })); + return new Response($msg, 500); +})); +``` And that's why the simple looking ``HttpKernelInterface`` is so powerful. It gives you access to a lot of cool features, ready to be used out of the box, diff --git a/src/Symfony/Component/OptionsResolver/README.md b/src/Symfony/Component/OptionsResolver/README.md index 65617f79a3..412222e857 100644 --- a/src/Symfony/Component/OptionsResolver/README.md +++ b/src/Symfony/Component/OptionsResolver/README.md @@ -12,88 +12,96 @@ The following example demonstrates a Person class with two required options the default value of "gender" is derived from the passed first name, if possible, and may only be one of "male" and "female". - use Symfony\Component\OptionsResolver\OptionsResolver; - use Symfony\Component\OptionsResolver\OptionsResolverInterface; - use Symfony\Component\OptionsResolver\Options; +```php +use Symfony\Component\OptionsResolver\OptionsResolver; +use Symfony\Component\OptionsResolver\OptionsResolverInterface; +use Symfony\Component\OptionsResolver\Options; - class Person +class Person +{ + protected $options; + + public function __construct(array $options = array()) { - protected $options; + $resolver = new OptionsResolver(); + $this->setDefaultOptions($resolver); - public function __construct(array $options = array()) - { - $resolver = new OptionsResolver(); - $this->setDefaultOptions($resolver); - - $this->options = $resolver->resolve($options); - } - - protected function setDefaultOptions(OptionsResolverInterface $resolver) - { - $resolver->setRequired(array( - 'firstName', - 'lastName', - )); - - $resolver->setDefaults(array( - 'age' => null, - 'gender' => function (Options $options) { - if (self::isKnownMaleName($options['firstName'])) { - return 'male'; - } - - return 'female'; - }, - )); - - $resolver->setAllowedValues(array( - 'gender' => array('male', 'female'), - )); - } + $this->options = $resolver->resolve($options); } + protected function setDefaultOptions(OptionsResolverInterface $resolver) + { + $resolver->setRequired(array( + 'firstName', + 'lastName', + )); + + $resolver->setDefaults(array( + 'age' => null, + 'gender' => function (Options $options) { + if (self::isKnownMaleName($options['firstName'])) { + return 'male'; + } + + return 'female'; + }, + )); + + $resolver->setAllowedValues(array( + 'gender' => array('male', 'female'), + )); + } +} +``` + We can now easily instantiate a Person object: - // 'gender' is implicitly set to 'female' - $person = new Person(array( - 'firstName' => 'Jane', - 'lastName' => 'Doe', - )); +```php +// 'gender' is implicitly set to 'female' +$person = new Person(array( + 'firstName' => 'Jane', + 'lastName' => 'Doe', +)); +``` We can also override the default values of the optional options: - $person = new Person(array( - 'firstName' => 'Abdullah', - 'lastName' => 'Mogashi', - 'gender' => 'male', - 'age' => 30, - )); +```php +$person = new Person(array( + 'firstName' => 'Abdullah', + 'lastName' => 'Mogashi', + 'gender' => 'male', + 'age' => 30, +)); +``` Options can be added or changed in subclasses by overriding the `setDefaultOptions` method: - use Symfony\Component\OptionsResolver\OptionsResolver; - use Symfony\Component\OptionsResolver\Options; +```php +use Symfony\Component\OptionsResolver\OptionsResolver; +use Symfony\Component\OptionsResolver\Options; - class Employee extends Person +class Employee extends Person +{ + protected function setDefaultOptions(OptionsResolverInterface $resolver) { - protected function setDefaultOptions(OptionsResolverInterface $resolver) - { - parent::setDefaultOptions($resolver); + parent::setDefaultOptions($resolver); - $resolver->setRequired(array( - 'birthDate', - )); + $resolver->setRequired(array( + 'birthDate', + )); - $resolver->setDefaults(array( - // $previousValue contains the default value configured in the - // parent class - 'age' => function (Options $options, $previousValue) { - return self::calculateAge($options['birthDate']); - } - )); - } + $resolver->setDefaults(array( + // $previousValue contains the default value configured in the + // parent class + 'age' => function (Options $options, $previousValue) { + return self::calculateAge($options['birthDate']); + } + )); } +} +``` diff --git a/src/Symfony/Component/Process/README.md b/src/Symfony/Component/Process/README.md index c7e21386da..29d1cf9330 100644 --- a/src/Symfony/Component/Process/README.md +++ b/src/Symfony/Component/Process/README.md @@ -5,16 +5,18 @@ Process executes commands in sub-processes. In this example, we run a simple directory listing and get the result back: - use Symfony\Component\Process\Process; +```php +use Symfony\Component\Process\Process; - $process = new Process('ls -lsa'); - $process->setTimeout(3600); - $process->run(); - if (!$process->isSuccessful()) { - throw new RuntimeException($process->getErrorOutput()); - } +$process = new Process('ls -lsa'); +$process->setTimeout(3600); +$process->run(); +if (!$process->isSuccessful()) { + throw new RuntimeException($process->getErrorOutput()); +} - print $process->getOutput(); +print $process->getOutput(); +``` You can think that this is easy to achieve with plain PHP but it's not especially if you want to take care of the subtle differences between the different platforms. @@ -23,16 +25,18 @@ And if you want to be able to get some feedback in real-time, just pass an anonymous function to the ``run()`` method and you will get the output buffer as it becomes available: - use Symfony\Component\Process\Process; +```php +use Symfony\Component\Process\Process; - $process = new Process('ls -lsa'); - $process->run(function ($type, $buffer) { - if (Process::ERR === $type) { - echo 'ERR > '.$buffer; - } else { - echo 'OUT > '.$buffer; - } - }); +$process = new Process('ls -lsa'); +$process->run(function ($type, $buffer) { + if (Process::ERR === $type) { + echo 'ERR > '.$buffer; + } else { + echo 'OUT > '.$buffer; + } +}); +``` That's great if you want to execute a long running command (like rsync-ing files to a remote server) and give feedback to the user in real-time. diff --git a/src/Symfony/Component/Routing/CHANGELOG.md b/src/Symfony/Component/Routing/CHANGELOG.md index f0c616d080..9070412c95 100644 --- a/src/Symfony/Component/Routing/CHANGELOG.md +++ b/src/Symfony/Component/Routing/CHANGELOG.md @@ -16,17 +16,21 @@ CHANGELOG Before: - ``` + ```yaml article_edit: pattern: /article/{id} requirements: { '_method': 'POST|PUT', '_scheme': 'https', 'id': '\d+' } + ``` + ```xml POST|PUT https \d+ + ``` + ```php $route = new Route(); $route->setPattern('/article/{id}'); $route->setRequirement('_method', 'POST|PUT'); @@ -35,17 +39,21 @@ CHANGELOG After: - ``` + ```yaml article_edit: path: /article/{id} methods: [POST, PUT] schemes: https requirements: { 'id': '\d+' } + ``` + ```xml \d+ + ``` + ```php $route = new Route(); $route->setPath('/article/{id}'); $route->setMethods(array('POST', 'PUT')); @@ -59,7 +67,7 @@ CHANGELOG Before: - ``` + ```php $rootCollection = new RouteCollection(); $subCollection = new RouteCollection(); $rootCollection->addCollection($subCollection); @@ -68,7 +76,7 @@ CHANGELOG After: - ``` + ```php $rootCollection = new RouteCollection(); $subCollection = new RouteCollection(); $subCollection->add('foo', new Route('/foo')); @@ -78,8 +86,8 @@ CHANGELOG Also one must call `addCollection` from the bottom to the top hierarchy. So the correct sequence is the following (and not the reverse): - ``` - $childCollection->->addCollection($grandchildCollection); + ```php + $childCollection->addCollection($grandchildCollection); $rootCollection->addCollection($childCollection); ``` @@ -105,7 +113,7 @@ CHANGELOG use-case instead. Before: `$parentCollection->addCollection($collection, '/prefix', array(...), array(...))` After: - ``` + ```php $collection->addPrefix('/prefix', array(...), array(...)); $parentCollection->addCollection($collection); ``` @@ -157,6 +165,6 @@ CHANGELOG been used anyway without creating inconsistencies * [BC BREAK] RouteCollection::remove also removes a route from parent collections (not only from its children) - * added ConfigurableRequirementsInterface that allows to disable exceptions + * added ConfigurableRequirementsInterface that allows to disable exceptions (and generate empty URLs instead) when generating a route with an invalid parameter value diff --git a/src/Symfony/Component/Routing/README.md b/src/Symfony/Component/Routing/README.md index 83febc79bb..cd566a59c1 100644 --- a/src/Symfony/Component/Routing/README.md +++ b/src/Symfony/Component/Routing/README.md @@ -6,23 +6,25 @@ Routing associates a request with the code that will convert it to a response. The example below demonstrates how you can set up a fully working routing system: - use Symfony\Component\HttpFoundation\Request; - use Symfony\Component\Routing\Matcher\UrlMatcher; - use Symfony\Component\Routing\RequestContext; - use Symfony\Component\Routing\RouteCollection; - use Symfony\Component\Routing\Route; +```php +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Routing\Matcher\UrlMatcher; +use Symfony\Component\Routing\RequestContext; +use Symfony\Component\Routing\RouteCollection; +use Symfony\Component\Routing\Route; - $routes = new RouteCollection(); - $routes->add('hello', new Route('/hello', array('controller' => 'foo'))); +$routes = new RouteCollection(); +$routes->add('hello', new Route('/hello', array('controller' => 'foo'))); - $context = new RequestContext(); +$context = new RequestContext(); - // this is optional and can be done without a Request instance - $context->fromRequest(Request::createFromGlobals()); +// this is optional and can be done without a Request instance +$context->fromRequest(Request::createFromGlobals()); - $matcher = new UrlMatcher($routes, $context); +$matcher = new UrlMatcher($routes, $context); - $parameters = $matcher->match('/hello'); +$parameters = $matcher->match('/hello'); +``` Resources --------- diff --git a/src/Symfony/Component/Translation/README.md b/src/Symfony/Component/Translation/README.md index 87349048b7..0eba8455ae 100644 --- a/src/Symfony/Component/Translation/README.md +++ b/src/Symfony/Component/Translation/README.md @@ -4,18 +4,20 @@ Translation Component Translation provides tools for loading translation files and generating translated strings from these including support for pluralization. - use Symfony\Component\Translation\Translator; - use Symfony\Component\Translation\MessageSelector; - use Symfony\Component\Translation\Loader\ArrayLoader; +```php +use Symfony\Component\Translation\Translator; +use Symfony\Component\Translation\MessageSelector; +use Symfony\Component\Translation\Loader\ArrayLoader; - $translator = new Translator('fr_FR', new MessageSelector()); - $translator->setFallbackLocales(array('fr')); - $translator->addLoader('array', new ArrayLoader()); - $translator->addResource('array', array( - 'Hello World!' => 'Bonjour', - ), 'fr'); +$translator = new Translator('fr_FR', new MessageSelector()); +$translator->setFallbackLocales(array('fr')); +$translator->addLoader('array', new ArrayLoader()); +$translator->addResource('array', array( + 'Hello World!' => 'Bonjour', +), 'fr'); - echo $translator->trans('Hello World!')."\n"; +echo $translator->trans('Hello World!')."\n"; +``` Resources --------- diff --git a/src/Symfony/Component/Validator/README.md b/src/Symfony/Component/Validator/README.md index ec3784b00b..9bec225bee 100644 --- a/src/Symfony/Component/Validator/README.md +++ b/src/Symfony/Component/Validator/README.md @@ -12,12 +12,14 @@ The component provides "validation constraints", which are simple objects containing the rules for the validation. Let's validate a simple string as an example: - use Symfony\Component\Validator\Validation; - use Symfony\Component\Validator\Constraints\Length; +```php +use Symfony\Component\Validator\Validation; +use Symfony\Component\Validator\Constraints\Length; - $validator = Validation::createValidator(); +$validator = Validation::createValidator(); - $violations = $validator->validateValue('Bernhard', new Length(array('min' => 10))); +$violations = $validator->validateValue('Bernhard', new Length(array('min' => 10))); +``` This validation will fail because the given string is shorter than ten characters. The precise errors, here called "constraint violations", are @@ -26,24 +28,26 @@ If the violation list is empty, validation succeeded. Validation of arrays is possible using the `Collection` constraint: - use Symfony\Component\Validator\Validation; - use Symfony\Component\Validator\Constraints as Assert; +```php +use Symfony\Component\Validator\Validation; +use Symfony\Component\Validator\Constraints as Assert; - $validator = Validation::createValidator(); +$validator = Validation::createValidator(); - $constraint = new Assert\Collection(array( - 'name' => new Assert\Collection(array( - 'first_name' => new Assert\Length(array('min' => 101)), - 'last_name' => new Assert\Length(array('min' => 1)), - )), - 'email' => new Assert\Email(), - 'simple' => new Assert\Length(array('min' => 102)), - 'gender' => new Assert\Choice(array(3, 4)), - 'file' => new Assert\File(), - 'password' => new Assert\Length(array('min' => 60)), - )); +$constraint = new Assert\Collection(array( + 'name' => new Assert\Collection(array( + 'first_name' => new Assert\Length(array('min' => 101)), + 'last_name' => new Assert\Length(array('min' => 1)), + )), + 'email' => new Assert\Email(), + 'simple' => new Assert\Length(array('min' => 102)), + 'gender' => new Assert\Choice(array(3, 4)), + 'file' => new Assert\File(), + 'password' => new Assert\Length(array('min' => 60)), +)); - $violations = $validator->validateValue($input, $constraint); +$violations = $validator->validateValue($input, $constraint); +``` Again, the validator returns the list of violations. @@ -52,45 +56,47 @@ a mapping you can put constraints onto properties and objects of classes. Whenever an object of this class is validated, its properties and method results are matched against the constraints. - use Symfony\Component\Validator\Validation; - use Symfony\Component\Validator\Constraints as Assert; +```php +use Symfony\Component\Validator\Validation; +use Symfony\Component\Validator\Constraints as Assert; - class User +class User +{ + /** + * @Assert\Length(min = 3) + * @Assert\NotBlank + */ + private $name; + + /** + * @Assert\Email + * @Assert\NotBlank + */ + private $email; + + public function __construct($name, $email) { - /** - * @Assert\Length(min = 3) - * @Assert\NotBlank - */ - private $name; - - /** - * @Assert\Email - * @Assert\NotBlank - */ - private $email; - - public function __construct($name, $email) - { - $this->name = $name; - $this->email = $email; - } - - /** - * @Assert\True(message = "The user should have a Google Mail account") - */ - public function isGmailUser() - { - return false !== strpos($this->email, '@gmail.com'); - } + $this->name = $name; + $this->email = $email; } - $validator = Validation::createValidatorBuilder() - ->enableAnnotationMapping() - ->getValidator(); + /** + * @Assert\True(message = "The user should have a Google Mail account") + */ + public function isGmailUser() + { + return false !== strpos($this->email, '@gmail.com'); + } +} - $user = new User('John Doe', 'john@example.com'); +$validator = Validation::createValidatorBuilder() + ->enableAnnotationMapping() + ->getValidator(); - $violations = $validator->validate($user); +$user = new User('John Doe', 'john@example.com'); + +$violations = $validator->validate($user); +``` This example uses the annotation support of Doctrine Common to map constraints to properties and methods. You can also map constraints diff --git a/src/Symfony/Component/Yaml/README.md b/src/Symfony/Component/Yaml/README.md index 941a3460e3..50f9e09488 100644 --- a/src/Symfony/Component/Yaml/README.md +++ b/src/Symfony/Component/Yaml/README.md @@ -3,11 +3,13 @@ Yaml Component YAML implements most of the YAML 1.2 specification. - use Symfony\Component\Yaml\Yaml; +```php +use Symfony\Component\Yaml\Yaml; - $array = Yaml::parse($file); +$array = Yaml::parse($file); - print Yaml::dump($array); +print Yaml::dump($array); +``` Resources ---------