diff --git a/book/doctrine.rst b/book/doctrine.rst index 82e22ba1386..0f3f62086d0 100644 --- a/book/doctrine.rst +++ b/book/doctrine.rst @@ -119,7 +119,7 @@ for you: .. sidebar:: Setting up the Database to be UTF8 One mistake even seasoned developers make when starting a Symfony project - is forgetting to setup default charset and collation on their database, + is forgetting to set up default charset and collation on their database, ending up with latin type collations, which are default for most databases. They might even remember to do it the very first time, but forget that it's all gone after running a relatively common command during development: @@ -339,7 +339,7 @@ see the :ref:`book-doctrine-field-types` section. You can also check out Doctrine's `Basic Mapping Documentation`_ for all details about mapping information. If you use annotations, you'll - need to prepend all annotations with ``ORM\`` (e.g. ``ORM\Column(..)``), + need to prepend all annotations with ``ORM\`` (e.g. ``ORM\Column(...)``), which is not shown in Doctrine's documentation. You'll also need to include the ``use Doctrine\ORM\Mapping as ORM;`` statement, which *imports* the ``ORM`` annotations prefix. @@ -357,7 +357,7 @@ see the :ref:`book-doctrine-field-types` section. .. note:: - When using another library or program (ie. Doxygen) that uses annotations, + When using another library or program (e.g. Doxygen) that uses annotations, you should place the ``@IgnoreAnnotation`` annotation on the class to indicate which annotations Symfony should ignore. @@ -385,7 +385,7 @@ a regular PHP class, you need to create getter and setter methods (e.g. ``getNam $ php app/console doctrine:generate:entities AppBundle/Entity/Product -This command makes sure that all of the getters and setters are generated +This command makes sure that all the getters and setters are generated for the ``Product`` class. This is a safe command - you can run it over and over again: it only generates getters and setters that don't exist (i.e. it doesn't replace your existing methods). @@ -432,7 +432,7 @@ mapping information) of a bundle or an entire namespace: .. note:: Doctrine doesn't care whether your properties are ``protected`` or ``private``, - or whether or not you have a getter or setter function for a property. + or whether you have a getter or setter function for a property. The getters and setters are generated here only because you'll need them to interact with your PHP object. @@ -770,7 +770,7 @@ already did in the previous section). The DQL syntax is incredibly powerful, allowing you to easily join between entities (the topic of :ref:`relations ` will be -covered later), group, etc. For more information, see the official Doctrine +covered later), group, etc. For more information, see the official `Doctrine Query Language`_ documentation. Custom Repository Classes @@ -833,7 +833,7 @@ used earlier to generate the missing getter and setter methods: $ php app/console doctrine:generate:entities AppBundle Next, add a new method - ``findAllOrderedByName()`` - to the newly generated -repository class. This method will query for all of the ``Product`` entities, +repository class. This method will query for all the ``Product`` entities, ordered alphabetically. .. code-block:: php @@ -1352,7 +1352,7 @@ Doctrine's `Lifecycle Events documentation`_. transforming data in the entity (e.g. setting a created/updated field, generating a slug value). - If you need to do some heavier lifting - like perform logging or send + If you need to do some heavier lifting - like performing logging or sending an email - you should register an external class as an event listener or subscriber and give it access to whatever resources you need. For more information, see :doc:`/cookbook/doctrine/event_listeners_subscribers`. @@ -1362,7 +1362,7 @@ Doctrine's `Lifecycle Events documentation`_. Doctrine Field Types Reference ------------------------------ -Doctrine comes with a large number of field types available. Each of these +Doctrine comes with numerous field types available. Each of these maps a PHP data type to a specific column type in whatever database you're using. For each field type, the ``Column`` can be configured further, setting the ``length``, ``nullable`` behavior, ``name`` and other options. To see a diff --git a/book/forms.rst b/book/forms.rst index 7463506118d..0ff9231e4c2 100644 --- a/book/forms.rst +++ b/book/forms.rst @@ -172,7 +172,7 @@ That's it! Just three lines are needed to render the complete form: when using file uploads. ``form_widget(form)`` - Renders all of the fields, which includes the field element itself, a label + Renders all the fields, which includes the field element itself, a label and any validation error messages for the field. ``form_end()`` diff --git a/book/from_flat_php_to_symfony2.rst b/book/from_flat_php_to_symfony2.rst index f9c90d5d6e1..daae6e19c37 100644 --- a/book/from_flat_php_to_symfony2.rst +++ b/book/from_flat_php_to_symfony2.rst @@ -126,7 +126,7 @@ is primarily an HTML file that uses a template-like PHP syntax: -By convention, the file that contains all of the application logic - ``index.php`` - +By convention, the file that contains all the application logic - ``index.php`` - is known as a "controller". The term :term:`controller` is a word you'll hear a lot, regardless of the language or framework you use. It refers simply to the area of *your* code that processes user input and prepares the response. @@ -244,8 +244,8 @@ the layout: -You've now introduced a methodology that allows for the reuse of the -layout. Unfortunately, to accomplish this, you're forced to use a few ugly +You now have a setup that will allow you to reuse the layout. +Unfortunately, to accomplish this, you're forced to use a few ugly PHP functions (``ob_start()``, ``ob_get_clean()``) in the template. Symfony uses a Templating component that allows this to be accomplished cleanly and easily. You'll see it in action shortly. diff --git a/book/http_cache.rst b/book/http_cache.rst index 1a41d2bb422..aeee80fa13b 100644 --- a/book/http_cache.rst +++ b/book/http_cache.rst @@ -236,7 +236,7 @@ Here is a list of the main options: (default: ``60``). This setting is overridden by the ``stale-if-error`` HTTP ``Cache-Control`` extension (see RFC 5861). -If ``debug`` is ``true``, Symfony automatically adds a ``X-Symfony-Cache`` +If ``debug`` is ``true``, Symfony automatically adds an ``X-Symfony-Cache`` header to the response containing useful information about cache hits and misses. @@ -427,7 +427,7 @@ on a cache to store and return "fresh" responses. model of the specification dominates your work. Unfortunately, the actual specification document - `RFC 2616`_ - can be difficult to read. - There is an on-going effort (`HTTP Bis`_) to rewrite the RFC 2616. It does + There is an ongoing effort (`HTTP Bis`_) to rewrite the RFC 2616. It does not describe a new version of HTTP, but mostly clarifies the original HTTP specification. The organization is also improved as the specification is split into seven parts; everything related to HTTP caching can be @@ -482,7 +482,7 @@ The resulting HTTP header will look like this: timezone as required by the specification. Note that in HTTP versions before 1.1 the origin server wasn't required to -send the ``Date`` header. Consequently the cache (e.g. the browser) might +send the ``Date`` header. Consequently, the cache (e.g. the browser) might need to rely on the local clock to evaluate the ``Expires`` header making the lifetime calculation vulnerable to clock skew. Another limitation of the ``Expires`` header is that the specification states that "HTTP/1.1 @@ -528,9 +528,9 @@ won't be asked to return the updated response until the cache finally becomes stale. The validation model addresses this issue. Under this model, the cache continues -to store responses. The difference is that, for each request, the cache asks -the application whether or not the cached response is still valid. If the -cache *is* still valid, your application should return a 304 status code +to store responses. The difference is that, for each request, the cache asks the +application if the cached response is still valid or if it needs to be regenerated. +If the cache *is* still valid, your application should return a 304 status code and no content. This tells the cache that it's ok to return the cached response. Under this model, you only save CPU if you're able to determine that the diff --git a/book/http_fundamentals.rst b/book/http_fundamentals.rst index b49729183f7..74da155cc7f 100644 --- a/book/http_fundamentals.rst +++ b/book/http_fundamentals.rst @@ -38,7 +38,7 @@ how you develop on the web, the goal of your server is *always* to understand simple text requests, and return simple text responses. Symfony is built from the ground up around that reality. Whether you realize -it or not, HTTP is something you use everyday. With Symfony, you'll learn +it or not, HTTP is something you use every day. With Symfony, you'll learn how to master it. .. index:: @@ -542,7 +542,7 @@ regardless of how your project is developed. To name a few: :doc:`Translation ` A framework for translating strings in your application. -Each and every one of these components is decoupled and can be used in *any* +Each one of these components is decoupled and can be used in *any* PHP project, regardless of whether or not you use the Symfony framework. Every part is made to be used if needed and replaced when necessary. diff --git a/book/installation.rst b/book/installation.rst index f065473ec3f..66f32524942 100644 --- a/book/installation.rst +++ b/book/installation.rst @@ -279,7 +279,7 @@ If there are any issues, correct them now before moving on. Updating Symfony Applications ----------------------------- -At this point, you've create a fully-functional Symfony application in which +At this point, you've created a fully-functional Symfony application in which you'll start to develop your own project. A Symfony application depends on a number of external libraries. These are downloaded into the ``vendor/`` directory and they are managed exclusively by Composer. @@ -326,10 +326,10 @@ If you're using a version control system like `Git`_, you can safely commit all your project's code. The reason is that Symfony applications already contain a ``.gitignore`` file specially prepared for Symfony. -For specific instructions on how best to setup your project to be stored +For specific instructions on how best to set up your project to be stored in Git, see :doc:`/cookbook/workflow/new_project_git`. -Checking out a Versioned Symfony Application +Checking out a versioned Symfony Application ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When using Composer to manage application's dependencies, it's recommended to diff --git a/book/page_creation.rst b/book/page_creation.rst index cf8ca140e58..32fd6cf5154 100644 --- a/book/page_creation.rst +++ b/book/page_creation.rst @@ -93,7 +93,7 @@ Before you begin: Create the Bundle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Before you begin, you'll need to create a *bundle*. In Symfony, a :term:`bundle` -is like a plugin, except that all of the code in your application will live +is like a plugin, except that all the code in your application will live inside a bundle. A bundle is nothing more than a directory that houses everything related @@ -108,7 +108,7 @@ create the route. To create a bundle called ``AcmeDemoBundle`` (a play bundle that you'll build in this chapter), run the following command and follow the on-screen -instructions (use all of the default options): +instructions (use all the default options): .. code-block:: bash @@ -327,7 +327,7 @@ An optional, but common, third step in the process is to create a template. Optional Step 3: Create the Template ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Templates allow you to move all of the presentation (e.g. HTML code) into +Templates allow you to move all the presentation code (e.g. HTML) into a separate file and reuse different portions of the page layout. Instead of writing the HTML inside the controller, render a template instead: @@ -607,7 +607,7 @@ You'll learn more about each of these directories in later chapters. The Source (``src``) Directory ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Put simply, the ``src/`` directory contains all of the actual code (PHP code, +Put simply, the ``src/`` directory contains all the actual code (PHP code, templates, configuration files, stylesheets, etc) that drives *your* application. When developing, the vast majority of your work will be done inside one or more bundles that you create in this directory. @@ -788,7 +788,7 @@ bundle. Application Configuration ------------------------- -An application consists of a collection of bundles representing all of the +An application consists of a collection of bundles representing all the features and capabilities of your application. Each bundle can be customized via configuration files written in YAML, XML or PHP. By default, the main configuration file lives in the ``app/config/`` directory and is called diff --git a/book/security.rst b/book/security.rst index 1a5d90bc823..41efa44eeda 100644 --- a/book/security.rst +++ b/book/security.rst @@ -171,7 +171,7 @@ Firewalls (Authentication) When a user makes a request to a URL that's protected by a firewall, the security system is activated. The job of the firewall is to determine whether -or not the user needs to be authenticated, and if they do, to send a response +the user needs to be authenticated, and if they do, to send a response back to the user initiating the authentication process. A firewall is activated when the URL of an incoming request matches the configured @@ -708,7 +708,7 @@ see :doc:`/cookbook/security/form_login`. Next, make sure that your ``check_path`` URL (e.g. ``/login_check``) is behind the firewall you're using for your form login (in this example, the single firewall matches *all* URLs, including ``/login_check``). If - ``/login_check`` doesn't match any firewall, you'll receive a ``Unable + ``/login_check`` doesn't match any firewall, you'll receive an ``Unable to find the controller for path "/login_check"`` exception. **4. Multiple firewalls don't share security context** @@ -825,7 +825,7 @@ things: ................... Symfony creates an instance of :class:`Symfony\\Component\\HttpFoundation\\RequestMatcher` -for each ``access_control`` entry, which determines whether or not a given +for each ``access_control`` entry, which determines whether a given access control should be used on this request. The following ``access_control`` options are used for matching: @@ -1458,7 +1458,7 @@ key in ``app/config/security.yml``. When you allow a user to submit a plaintext password (e.g. registration form, change password form), you *must* have validation that guarantees - that the password is 4096 characters or less. Read more details in + that the password is 4096 characters or fewer. Read more details in :ref:`How to implement a simple Registration Form `. Retrieving the User Object @@ -1659,7 +1659,7 @@ Roles The idea of a "role" is key to the authorization process. Each user is assigned a set of roles and then each resource requires one or more roles. If the user -has any one of the required roles, access is granted. Otherwise access is denied. +has any one of the required roles, access is granted. Otherwise, access is denied. Roles are pretty simple, and are basically strings that you can invent and use as needed (though roles are objects internally). For example, if you @@ -2062,7 +2062,7 @@ Security can be a deep and complex issue to solve correctly in your application. Fortunately, Symfony's Security component follows a well-proven security model based around *authentication* and *authorization*. Authentication, which always happens first, is handled by a firewall whose job is to determine -the identity of the user through several different methods (e.g. HTTP authentication, +the identity of the user through several methods (e.g. HTTP authentication, login form, etc). In the cookbook, you'll find examples of other methods for handling authentication, including how to implement a "remember me" cookie functionality. diff --git a/book/service_container.rst b/book/service_container.rst index ea1996179b2..a5253d7b3bc 100644 --- a/book/service_container.rst +++ b/book/service_container.rst @@ -174,7 +174,7 @@ is never created. This saves memory and increases the speed of your application. This also means that there's very little or no performance hit for defining lots of services. Services that are never used are never constructed. -As an added bonus, the ``Mailer`` service is only created once and the same +As a bonus, the ``Mailer`` service is only created once and the same instance is returned each time you ask for the service. This is almost always the behavior you'll need (it's more flexible and powerful), but you'll learn later how you can configure a service that has multiple instances in the @@ -525,7 +525,7 @@ In this case, the extension allows you to customize the ``error_handler``, the FrameworkBundle uses the options specified here to define and configure the services specific to it. The bundle takes care of creating all the necessary ``parameters`` and ``services`` for the service container, while still allowing -much of the configuration to be easily customized. As an added bonus, most +much of the configuration to be easily customized. As a bonus, most service container extensions are also smart enough to perform validation - notifying you of options that are missing or the wrong data type. @@ -964,7 +964,7 @@ console. To show all services and the class for each service, run: $ php app/console container:debug -By default only public services are shown, but you can also view private services: +By default, only public services are shown, but you can also view private services: .. code-block:: bash diff --git a/book/templating.rst b/book/templating.rst index dd2cb88300b..4b003e8bad6 100644 --- a/book/templating.rst +++ b/book/templating.rst @@ -408,7 +408,7 @@ Referencing Templates in a Bundle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Symfony uses a **bundle**:**directory**:**filename** string syntax for -templates that live inside a bundle. This allows for several different types of +templates that live inside a bundle. This allows for several types of templates, each which lives in a specific location: * ``AcmeBlogBundle:Blog:index.html.twig``: This syntax is used to specify a @@ -504,7 +504,7 @@ Including other Templates ~~~~~~~~~~~~~~~~~~~~~~~~~ You'll often want to include the same template or code fragment on several -different pages. For example, in an application with "news articles", the +pages. For example, in an application with "news articles", the template code displaying an article might be used on the article detail page, on a page displaying the most popular articles, or in a list of the latest articles. @@ -1521,7 +1521,7 @@ Templates are a generic way to render content in *any* format. And while in most cases you'll use templates to render HTML content, a template can just as easily generate JavaScript, CSS, XML or any other format you can dream of. -For example, the same "resource" is often rendered in several different formats. +For example, the same "resource" is often rendered in several formats. To render an article index page in XML, simply include the format in the template name: diff --git a/book/testing.rst b/book/testing.rst index d757d1c460c..d7e98d551fa 100644 --- a/book/testing.rst +++ b/book/testing.rst @@ -47,7 +47,7 @@ Unit Tests A unit test is usually a test against a specific PHP class. If you want to test the overall behavior of your application, see the section about `Functional Tests`_. -Writing Symfony unit tests is no different than writing standard PHPUnit +Writing Symfony unit tests is no different from writing standard PHPUnit unit tests. Suppose, for example, that you have an *incredibly* simple class called ``Calculator`` in the ``Utility/`` directory of your bundle:: @@ -622,7 +622,7 @@ Just like links, you select forms with the ``selectButton()`` method:: button. The ``selectButton()`` method can select ``button`` tags and submit ``input`` -tags. It uses several different parts of the buttons to find them: +tags. It uses several parts of the buttons to find them: * The ``value`` attribute value; @@ -775,7 +775,7 @@ PHPUnit Configuration Each application has its own PHPUnit configuration, stored in the ``app/phpunit.xml.dist`` file. You can edit this file to change the defaults or -create an ``app/phpunit.xml`` file to setup a configuration for your local +create an ``app/phpunit.xml`` file to set up a configuration for your local machine only. .. tip:: diff --git a/book/translation.rst b/book/translation.rst index 281fadd8bc5..d6094a3a5d7 100644 --- a/book/translation.rst +++ b/book/translation.rst @@ -392,7 +392,7 @@ Fallback Translation Locales Imagine that the user's locale is ``fr_FR`` and that you're translating the key ``Symfony is great``. To find the French translation, Symfony actually -checks translation resources for several different locales: +checks translation resources for several locales: #. First, Symfony looks for the translation in a ``fr_FR`` translation resource (e.g. ``messages.fr_FR.xliff``); @@ -437,7 +437,7 @@ The Locale and the URL ~~~~~~~~~~~~~~~~~~~~~~ Since you can store the locale of the user in the session, it may be tempting -to use the same URL to display a resource in many different languages based +to use the same URL to display a resource in different languages based on the user's locale. For example, ``http://www.example.com/contact`` could show content in English for one user and French for another user. Unfortunately, this violates a fundamental rule of the Web: that a particular URL returns diff --git a/book/validation.rst b/book/validation.rst index 43d231ec393..c6037c81f2f 100644 --- a/book/validation.rst +++ b/book/validation.rst @@ -31,7 +31,7 @@ your application:: } So far, this is just an ordinary class that serves some purpose inside your -application. The goal of validation is to tell you whether or not the data +application. The goal of validation is to tell you if the data of an object is valid. For this to work, you'll configure a list of rules (called :ref:`constraints `) that the object must follow in order to be valid. These rules can be specified via a number of @@ -112,7 +112,7 @@ Using the ``validator`` Service Next, to actually validate an ``Author`` object, use the ``validate`` method on the ``validator`` service (class :class:`Symfony\\Component\\Validator\\Validator`). The job of the ``validator`` is easy: to read the constraints (i.e. rules) -of a class and verify whether or not the data on the object satisfies those +of a class and verify if the data on the object satisfies those constraints. If validation fails, a non-empty list of errors (class :class:`Symfony\\Component\\Validator\\ConstraintViolationList`) is returned. Take this simple example from inside a controller:: @@ -303,13 +303,13 @@ to its class and then pass it to the ``validator`` service. Behind the scenes, a constraint is simply a PHP object that makes an assertive statement. In real life, a constraint could be: "The cake must not be burned". In Symfony, constraints are similar: they are assertions that a condition -is true. Given a value, a constraint will tell you whether or not that value +is true. Given a value, a constraint will tell you if that value adheres to the rules of the constraint. Supported Constraints ~~~~~~~~~~~~~~~~~~~~~ -Symfony packages a large number of the most commonly-needed constraints: +Symfony packages many of the most commonly-needed constraints: .. include:: /reference/constraints/map.rst.inc @@ -686,8 +686,8 @@ Validation Groups ----------------- So far, you've been able to add constraints to a class and ask whether or -not that class passes all of the defined constraints. In some cases, however, -you'll need to validate an object against only *some* of the constraints +not that class passes all the defined constraints. In some cases, however, +you'll need to validate an object against only *some* constraints on that class. To do this, you can organize each constraint into one or more "validation groups", and then apply validation against just one group of constraints.