diff --git a/README.markdown b/README.markdown index 56f267d7ea3..9e17f5d4b7f 100644 --- a/README.markdown +++ b/README.markdown @@ -7,9 +7,9 @@ Contributing ------------ >**Note** ->Unless you're documenting a feature that's new to a specific version of Symfony ->(e.g. Symfony 2.3), all pull requests must be based off of the **2.2** branch, ->**not** the master or 2.3 branch. +>Unless you're documenting a feature that was introduced *after* Symfony 2.3 +>(e.g. in Symfony 2.4), all pull requests must be based off of the **2.3** branch, +>**not** the master or older branches. We love contributors! For more information on how you can contribute to the Symfony documentation, please read diff --git a/book/controller.rst b/book/controller.rst index 167ffbecaaa..f693eb12028 100644 --- a/book/controller.rst +++ b/book/controller.rst @@ -513,7 +513,10 @@ value to each variable. $subRequest = $request->duplicate(array(), null, $path); $httpKernel = $this->container->get('http_kernel'); - $response = $httpKernel->handle($subRequest, HttpKernelInterface::SUB_REQUEST); + $response = $httpKernel->handle( + $subRequest, + HttpKernelInterface::SUB_REQUEST + ); .. index:: single: Controller; Rendering templates @@ -579,7 +582,8 @@ The Symfony templating engine is explained in great detail in the 'AcmeHelloBundle:Hello/Greetings:index.html.twig', array('name' => $name) ); - // index.html.twig found in Resources/views/Hello/Greetings is rendered. + // index.html.twig found in Resources/views/Hello/Greetings + // is rendered. .. index:: single: Controller; Accessing services diff --git a/book/doctrine.rst b/book/doctrine.rst index 026a3b4f977..b4ffafdbfa7 100644 --- a/book/doctrine.rst +++ b/book/doctrine.rst @@ -623,7 +623,9 @@ You can also take advantage of the useful ``findBy`` and ``findOneBy`` methods to easily fetch objects based on multiple conditions:: // query for one product matching be name and price - $product = $repository->findOneBy(array('name' => 'foo', 'price' => 19.99)); + $product = $repository->findOneBy( + array('name' => 'foo', 'price' => 19.99) + ); // query for all products matching the name, ordered by price $products = $repository->findBy( @@ -1144,7 +1146,8 @@ Now you can see this new code in action! Imagine you're inside a controller:: $em->flush(); return new Response( - 'Created product id: '.$product->getId().' and category id: '.$category->getId() + 'Created product id: '.$product->getId() + .' and category id: '.$category->getId() ); } } @@ -1253,8 +1256,8 @@ following method to the ``ProductRepository`` class:: public function findOneByIdJoinedToCategory($id) { $query = $this->getEntityManager() - ->createQuery(' - SELECT p, c FROM AcmeStoreBundle:Product p + ->createQuery( + 'SELECT p, c FROM AcmeStoreBundle:Product p JOIN p.category c WHERE p.id = :id' )->setParameter('id', $id); @@ -1478,8 +1481,8 @@ and ``nullable``. Take a few examples: protected $name; /** - * A string field of length 150 that persists to an "email_address" column - * and has a unique index. + * A string field of length 150 that persists to an + * "email_address" column and has a unique index. * * @ORM\Column(name="email_address", unique=true, length=150) */ @@ -1489,13 +1492,14 @@ and ``nullable``. Take a few examples: fields: # A string field length 255 that cannot be null - # (reflecting the default values for the "length" and *nullable* options) - # type attribute is necessary in YAML definitions + # (reflecting the default values for the "length" + # and *nullable* options) type attribute is + # necessary in YAML definitions name: type: string - # A string field of length 150 that persists to an "email_address" column - # and has a unique index. + # A string field of length 150 that persists to + # an "email_address" column and has a unique index. email: type: string column: email_address @@ -1506,8 +1510,9 @@ and ``nullable``. Take a few examples: `_ #3503 file extension correction xfliff to xliff (nixilla) +- `7fe0de3 `_ #3475 Fixed doc for framework.session.cookie_lifetime refrence. (tyomo4ka) +- `8155e4c `_ #3473 Update proxy_examples.rst (AZielinski) +- `c205bc6 `_ #3468 enclose YAML string with double quotes to fix syntax highlighting (xabbuh) +- `89963cc `_ #3463 Fix typos in cookbook/testing/database (ifdattic) +- `e0a52ec `_ #3460 remove confusing outdated note on interactive rebasing (xabbuh) +- `6831b13 `_ #3455 [Contributing][Code] fix indentation so that the text is rendered properly (xabbuh) +- `ea5816f `_ #3433 [WIP][Reference][Form Types] Update "radio" form type (bicpi) +- `42c80d1 `_ #3448 Overridden tweak (weaverryan) +- `d9d7c58 `_ #3444 Fix issue #3442 (ifdattic) +- `9e2e64b `_ #3427 Removed code references to Symfony Standard Distribution (danielcsgomes) +- `26b8146 `_ #3415 [#3334] the data_class option was not introduced in 2.4 (xabbuh) +- `0b2a491 `_ #3414 add missing code-block directive (xabbuh) +- `4988118 `_ #3432 [Reference][Form Types] Add "max_length" option in form type (nykopol) +- `26a7b1b `_ #3423 [Session Configuration] add clarifying notes on session save handler proxies (cordoval) + +Minor Documentation Changes +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- `1131247 `_ #3508 Add 'in XML' for additional clarity (ifdattic) +- `a650b93 `_ #3506 Nykopol overriden options (weaverryan) +- `ab10035 `_ #3505 replace Akamaï with Akamai (xabbuh) +- `7f56c20 `_ #3501 [Security] Fix markup (tyx) +- `80a90ba `_ #3500 Minimize horizontal scrolling in code blocks (improve readability) (ifdattic) +- `e5bc4ea `_ #3498 Remove second empty data (xabbuh) +- `d084d87 `_ #3485 [Cookbook][Assetic] Fix "javascripts" tag name typo (bicpi) +- `3250aba `_ #3481 Fix code block (minimise horizontal scrolling), typo in yaml (ifdattic) +- `f285d93 `_ #3451 some language tweaks (AE, third-person perspective) (xabbuh) +- `2b7e0f6 `_ #3497 Fix highlighting (WouterJ) +- `a535ae0 `_ #3471 Fixed `````versionadded````` inconsistencies in Symfony 2.3 (danielcsgomes) +- `f077a8e `_ #3465 change wording in versionadded example to be consistent with what we use... (xabbuh) +- `f9f7548 `_ #3462 Replace ... with etc (ifdattic) +- `65efcc4 `_ #3445 [Reference][Form Types] Add missing (but existing) options to "form" type (bicpi) +- `1d1b91d `_ #3431 [Config] add cautionary note on ini file loader limitation (cordoval) +- `f2eaf9b `_ #3419 doctrine file upload example uses dir -- caution added (cordoval) +- `72b53ad `_ #3404 [#3276] Trying to further clarify the session storage directory details (weaverryan) +- `67b7bbd `_ #3413 [Cookbook][Bundles] improve explanation of code block for bundle removal (cordoval) +- `7c5a914 `_ #3369 Indicate that Group Sequence Providers can use YAML (karptonite) +- `1e0311e `_ #3416 add empty_data option where required option is used (xabbuh) +- `2be3f52 `_ #3422 [Cookbook][Custom Authentication Provider] add a note of warning for when forbidding anonymous users (cordoval) diff --git a/components/dependency_injection/parameters.rst b/components/dependency_injection/parameters.rst index ecf83c853b9..98194076885 100644 --- a/components/dependency_injection/parameters.rst +++ b/components/dependency_injection/parameters.rst @@ -25,6 +25,13 @@ and set a parameter in the container with:: $container->setParameter('mailer.transport', 'sendmail'); +.. caution:: + + The used ``.`` notation is just a + :ref:`Symfony convention ` to make parameters + easier to read. Parameters are just flat key-value elements, they can't be + organized into a nested array + .. note:: You can only set a parameter before the container is compiled. To learn @@ -190,9 +197,9 @@ making the class of a service a parameter: Array Parameters ---------------- -Parameters do not need to be flat strings, they can also be arrays. For the XML -format, you need to use the ``type="collection"`` attribute for all parameters that are -arrays. +Parameters do not need to be flat strings, they can also contain array values. +For the XML format, you need to use the ``type="collection"`` attribute for +all parameters that are arrays. .. configuration-block:: diff --git a/components/event_dispatcher/generic_event.rst b/components/event_dispatcher/generic_event.rst index 9018c145577..3be0b9bb876 100644 --- a/components/event_dispatcher/generic_event.rst +++ b/components/event_dispatcher/generic_event.rst @@ -93,7 +93,7 @@ Filtering data:: use Symfony\Component\EventDispatcher\GenericEvent; - $event = new GenericEvent($subject, array('data' => 'foo')); + $event = new GenericEvent($subject, array('data' => 'Foo')); $dispatcher->dispatch('foo', $event); echo $event['data']; @@ -102,6 +102,6 @@ Filtering data:: { public function filter(GenericEvent $event) { - strtolower($event['data']); + $event['data'] = strtolower($event['data']); } } diff --git a/components/form/introduction.rst b/components/form/introduction.rst index 0e6b06ed826..a5e5732978a 100644 --- a/components/form/introduction.rst +++ b/components/form/introduction.rst @@ -181,8 +181,10 @@ to bootstrap or access Twig and add the :class:`Symfony\\Bridge\\Twig\\Extension $defaultFormTheme = 'form_div_layout.html.twig'; $vendorDir = realpath(__DIR__ . '/../vendor'); - // the path to TwigBridge so Twig can locate the form_div_layout.html.twig file - $vendorTwigBridgeDir = $vendorDir . '/symfony/twig-bridge/Symfony/Bridge/Twig'; + // the path to TwigBridge so Twig can locate the + // form_div_layout.html.twig file + $vendorTwigBridgeDir = + $vendorDir . '/symfony/twig-bridge/Symfony/Bridge/Twig'; // the path to your other templates $viewsDir = realpath(__DIR__ . '/../views'); @@ -193,7 +195,9 @@ to bootstrap or access Twig and add the :class:`Symfony\\Bridge\\Twig\\Extension $formEngine = new TwigRendererEngine(array($defaultFormTheme)); $formEngine->setEnvironment($twig); // add the FormExtension to Twig - $twig->addExtension(new FormExtension(new TwigRenderer($formEngine, $csrfProvider))); + $twig->addExtension( + new FormExtension(new TwigRenderer($formEngine, $csrfProvider)) + ); // create your form factory as normal $formFactory = Forms::createFormFactoryBuilder() @@ -307,7 +311,8 @@ Your integration with the Validation component will look something like this:: $vendorDir = realpath(__DIR__ . '/../vendor'); $vendorFormDir = $vendorDir . '/symfony/form/Symfony/Component/Form'; - $vendorValidatorDir = $vendorDir . '/symfony/validator/Symfony/Component/Validator'; + $vendorValidatorDir = + $vendorDir . '/symfony/validator/Symfony/Component/Validator'; // create the validator - details will vary $validator = Validation::createValidator(); diff --git a/components/http_foundation/introduction.rst b/components/http_foundation/introduction.rst index 902a8d93890..d3455a47440 100644 --- a/components/http_foundation/introduction.rst +++ b/components/http_foundation/introduction.rst @@ -262,7 +262,8 @@ If you need to get full access to parsed data from ``Accept``, ``Accept-Language } // accepts items are sorted by descending quality - $accepts = AcceptHeader::fromString($request->headers->get('Accept'))->all(); + $accepts = AcceptHeader::fromString($request->headers->get('Accept')) + ->all(); Accessing other Data ~~~~~~~~~~~~~~~~~~~~ @@ -286,8 +287,24 @@ PHP callable that is able to create an instance of your ``Request`` class:: use Symfony\Component\HttpFoundation\Request; - Request::setFactory(function (array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null) { - return SpecialRequest::create($query, $request, $attributes, $cookies, $files, $server, $content); + Request::setFactory(function ( + array $query = array(), + array $request = array(), + array $attributes = array(), + array $cookies = array(), + array $files = array(), + array $server = array(), + $content = null + ) { + return SpecialRequest::create( + $query, + $request, + $attributes, + $cookies, + $files, + $server, + $content + ); }); $request = Request::createFromGlobals(); @@ -458,7 +475,10 @@ abstracts the hard work behind a simple API:: use Symfony\Component\HttpFoundation\ResponseHeaderBag; - $d = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'foo.pdf'); + $d = $response->headers->makeDisposition( + ResponseHeaderBag::DISPOSITION_ATTACHMENT, + 'foo.pdf' + ); $response->headers->set('Content-Disposition', $d); @@ -482,7 +502,10 @@ if it should:: You can still set the ``Content-Type`` of the sent file, or change its ``Content-Disposition``:: $response->headers->set('Content-Type', 'text/plain'); - $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'filename.txt'); + $response->setContentDisposition( + ResponseHeaderBag::DISPOSITION_ATTACHMENT, + 'filename.txt' + ); .. _component-http-foundation-json-response: diff --git a/components/http_foundation/sessions.rst b/components/http_foundation/sessions.rst index 4a1bf6484bb..837da929b41 100644 --- a/components/http_foundation/sessions.rst +++ b/components/http_foundation/sessions.rst @@ -28,7 +28,7 @@ Quick example:: // retrieve messages foreach ($session->getFlashBag()->get('notice', array()) as $message) { - echo "
$message
"; + echo '
'.$message.'
'; } .. note:: @@ -254,7 +254,7 @@ has a simple API Adds a flash message to the stack of specified type; * :method:`Symfony\\Component\\HttpFoundation\\Session\\Flash\\FlashBagInterface::set`: - Sets flashes by type; This method conveniently takes both singles messages as + Sets flashes by type; This method conveniently takes both single messages as a ``string`` or multiple messages in an ``array``. * :method:`Symfony\\Component\\HttpFoundation\\Session\\Flash\\FlashBagInterface::get`: @@ -308,18 +308,18 @@ Simple, display one type of message:: // display warnings foreach ($session->getFlashBag()->get('warning', array()) as $message) { - echo "
$message
"; + echo '
'.$message.'
'; } // display errors foreach ($session->getFlashBag()->get('error', array()) as $message) { - echo "
$message
"; + echo '
'.$message.'
'; } Compact method to process display all flashes at once:: foreach ($session->getFlashBag()->all() as $type => $messages) { foreach ($messages as $message) { - echo "
$message
\n"; + echo '
'.$message.'
'; } } diff --git a/components/http_kernel/introduction.rst b/components/http_kernel/introduction.rst index 70b049e1a3f..5ab8e5c729b 100644 --- a/components/http_kernel/introduction.rst +++ b/components/http_kernel/introduction.rst @@ -603,6 +603,7 @@ a built-in ControllerResolver that can be used to create a working example:: use Symfony\Component\HttpKernel\HttpKernel; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\HttpKernel\Controller\ControllerResolver; + use Symfony\Component\HttpKernel\EventListener\RouterListener; use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\Route; use Symfony\Component\Routing\Matcher\UrlMatcher; @@ -611,7 +612,9 @@ a built-in ControllerResolver that can be used to create a working example:: $routes = new RouteCollection(); $routes->add('hello', new Route('/hello/{name}', array( '_controller' => function (Request $request) { - return new Response(sprintf("Hello %s", $request->get('name'))); + return new Response( + sprintf("Hello %s", $request->get('name')) + ); } ) )); @@ -647,7 +650,7 @@ your controller). :align: center To execute a sub request, use ``HttpKernel::handle``, but change the second -arguments as follows:: +argument as follows:: use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\HttpKernelInterface; diff --git a/components/intl.rst b/components/intl.rst index 4dbcb7d5a79..fd12431753b 100644 --- a/components/intl.rst +++ b/components/intl.rst @@ -78,7 +78,7 @@ code:: These versions are important when you deploy your application to a **server with a lower ICU version** than your development machines, because deployment will - fail if + fail if: * the development machines are compiled with ICU 4.4 or higher, but the server is compiled with a lower ICU version than 4.4; @@ -282,7 +282,12 @@ multi-valued entries (arrays), the values of the more specific and the fallback locale will be merged. In order to suppress this behavior, the last parameter ``$fallback`` can be set to ``false``:: - echo $reader->readEntry('/path/to/bundle', 'en', array('Data', 'entry1'), false); + echo $reader->readEntry( + '/path/to/bundle', + 'en', + array('Data', 'entry1'), + false + ); Accessing ICU Data ------------------ diff --git a/components/property_access/introduction.rst b/components/property_access/introduction.rst index 5f635c7d0da..11c0f5efe68 100644 --- a/components/property_access/introduction.rst +++ b/components/property_access/introduction.rst @@ -346,7 +346,7 @@ configured to enable extra features. To do that you could use the :class:`Symfony\\Component\\PropertyAccess\\PropertyAccessorBuilder`:: // ... - $accessorBuilder = PropertyAccess::getPropertyAccessorBuilder(); + $accessorBuilder = PropertyAccess::createPropertyAccessorBuilder(); // Enable magic __call $accessorBuilder->enableMagicCall(); @@ -361,7 +361,7 @@ configured to enable extra features. To do that you could use the $accessor = $accessorBuilder->getPropertyAccessor(); // Or all in one - $accessor = PropertyAccess::getPropertyAccessorBuilder() + $accessor = PropertyAccess::createPropertyAccessorBuilder() ->enableMagicCall() ->getPropertyAccessor(); diff --git a/contributing/code/standards.rst b/contributing/code/standards.rst index 1d512b3855e..aadcb34ef90 100644 --- a/contributing/code/standards.rst +++ b/contributing/code/standards.rst @@ -133,6 +133,8 @@ Naming Conventions * Don't forget to look at the more verbose :doc:`conventions` document for more subjective naming considerations. +.. _service-naming-conventions: + Service Naming Conventions ~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/contributing/documentation/overview.rst b/contributing/documentation/overview.rst index 695960bad64..1efc8e9fe15 100644 --- a/contributing/documentation/overview.rst +++ b/contributing/documentation/overview.rst @@ -202,7 +202,7 @@ For this example, suppose version 2.1 has just reached its end of maintenance: * All branches still under maintenance (e.g. 2.2 and higher) are updated to reflect that pull requests should start from the now-oldest maintained - version (e.g. 2.2). + version (e.g. 2.2) - including the details in the README file. * Remove all ``versionadded`` directives - and any other notes related to features changing or being new - for the version (e.g. 2.1) from the master branch. diff --git a/cookbook/bundles/remove.rst b/cookbook/bundles/remove.rst index af1dfd774b8..ce36fae32ab 100644 --- a/cookbook/bundles/remove.rst +++ b/cookbook/bundles/remove.rst @@ -95,9 +95,9 @@ rely on the bundle you are about to remove. .. tip:: - If one bundle relies on another, in most it means that it uses some services - from the bundle. Searching for the bundle alias string may help you spot - them (e.g. ``acme_demo`` for bundles depending on AcmeDemoBundle). + If one bundle relies on another, in most cases it means that it uses + some services from the bundle. Searching for the bundle alias string may + help you spot them (e.g. ``acme_demo`` for bundles depending on AcmeDemoBundle). .. tip:: diff --git a/cookbook/doctrine/event_listeners_subscribers.rst b/cookbook/doctrine/event_listeners_subscribers.rst index fb1274a38a7..bd1f322d0b3 100644 --- a/cookbook/doctrine/event_listeners_subscribers.rst +++ b/cookbook/doctrine/event_listeners_subscribers.rst @@ -154,6 +154,12 @@ specific type of entity (e.g. a ``Product`` entity but not a ``BlogPost`` entity), you should check for the entity's class type in your method (as shown above). +.. tip:: + + In Doctrine 2.4, a feature called Entity Listeners was introduced. + It is a lifecycle listener class used for an entity. You can read + about it in `the Doctrine Documentation`_. + Creating the Subscriber Class ----------------------------- @@ -211,3 +217,4 @@ interface and have an event method for each event it subscribes to:: For a full reference, see chapter `The Event System`_ in the Doctrine documentation. .. _`The Event System`: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html +.. _`the Doctrine Documentation`: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#entity-listeners diff --git a/cookbook/doctrine/multiple_entity_managers.rst b/cookbook/doctrine/multiple_entity_managers.rst index 40f54255ea9..e41301f00f2 100644 --- a/cookbook/doctrine/multiple_entity_managers.rst +++ b/cookbook/doctrine/multiple_entity_managers.rst @@ -187,11 +187,14 @@ the default entity manager (i.e. ``default``) is returned:: { public function indexAction() { - // both return the "default" em + // All three return the "default" entity manager $em = $this->get('doctrine')->getManager(); $em = $this->get('doctrine')->getManager('default'); + $em = $this->get('doctrine.orm.default_entity_manager'); - $customerEm = $this->get('doctrine')->getManager('customer'); + // Both of these return the "customer" entity manager + $customerEm = $this->get('doctrine')->getManager('customer'); + $customerEm = $this->get('doctrine.orm.customer_entity_manager'); } } diff --git a/cookbook/form/dynamic_form_modification.rst b/cookbook/form/dynamic_form_modification.rst index 54c18ceb34a..cddc46f063f 100644 --- a/cookbook/form/dynamic_form_modification.rst +++ b/cookbook/form/dynamic_form_modification.rst @@ -123,7 +123,7 @@ the event listener might look like the following:: // check if the Product object is "new" // If no data is passed to the form, the data is "null". // This should be considered a new "Product" - if (!$product || null !== $product->getId()) { + if (!$product || null === $product->getId()) { $form->add('name', 'text'); } }); @@ -207,7 +207,7 @@ class:: $product = $event->getData(); $form = $event->getForm(); - if (!$product || null !== $product->getId()) { + if (!$product || null === $product->getId()) { $form->add('name', 'text'); } } diff --git a/cookbook/security/acl.rst b/cookbook/security/acl.rst index bb3f20a299e..96f22a93d35 100644 --- a/cookbook/security/acl.rst +++ b/cookbook/security/acl.rst @@ -90,6 +90,10 @@ Getting Started Coming back to the small example from the beginning, you can now implement ACL for it. +Once the ACL is created, you can grant access to objects by creating an +Access Control Entity (ACE) to solidify the relationship between the entity +and your user. + Creating an ACL, and adding an ACE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/cookbook/testing/simulating_authentication.rst b/cookbook/testing/simulating_authentication.rst index b67365398b3..56168f09552 100644 --- a/cookbook/testing/simulating_authentication.rst +++ b/cookbook/testing/simulating_authentication.rst @@ -35,7 +35,7 @@ with a request. The following example demonstrates this technique:: { $this->logIn(); - $this->client->request('GET', '/demo/secured/hello/Fabien'); + $crawler = $this->client->request('GET', '/demo/secured/hello/Fabien'); $this->assertTrue($this->client->getResponse()->isSuccessful()); $this->assertGreaterThan(0, $crawler->filter('html:contains("Hello Fabien")')->count()); diff --git a/cookbook/workflow/new_project_git.rst b/cookbook/workflow/new_project_git.rst index 598dc6e9554..f0403af21a1 100644 --- a/cookbook/workflow/new_project_git.rst +++ b/cookbook/workflow/new_project_git.rst @@ -44,31 +44,25 @@ git repository: in which case, you can find more information here: `Github .gitignore`_ This way you can exclude files/folders often used by your IDE for all of your projects. -4. Copy ``app/config/parameters.yml`` to ``app/config/parameters.yml.dist``. - The ``parameters.yml`` file is ignored by Git (see above) so that machine-specific - settings like database passwords aren't committed. By creating the ``parameters.yml.dist`` - file, new developers can quickly clone the project, copy this file to - ``parameters.yml``, customize it, and start developing. - -5. Initialize your Git repository: +4. Initialize your Git repository: .. code-block:: bash $ git init -6. Add all of the initial files to Git: +5. Add all of the initial files to Git: .. code-block:: bash $ git add . -7. Create an initial commit with your started project: +6. Create an initial commit with your started project: .. code-block:: bash $ git commit -m "Initial commit" -8. Finally, download all of the third-party vendor libraries by +7. Finally, download all of the third-party vendor libraries by executing Composer. For details, see :ref:`installation-updating-vendors`. At this point, you have a fully-functional Symfony2 project that's correctly diff --git a/reference/forms/types/timezone.rst b/reference/forms/types/timezone.rst index ef4769e1cff..6867e89a8e0 100644 --- a/reference/forms/types/timezone.rst +++ b/reference/forms/types/timezone.rst @@ -12,7 +12,7 @@ or ``Europe/Istanbul``. Unlike the ``choice`` type, you don't need to specify a ``choices`` or ``choice_list`` option as the field type automatically uses a large list -of locales. You *can* specify either of these options manually, but then +of timezones. You *can* specify either of these options manually, but then you should just use the ``choice`` type directly. +-------------+------------------------------------------------------------------------+