Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proofreading tweaks to asset component #5082

Merged
merged 2 commits into from
Mar 22, 2015
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 64 additions & 29 deletions components/asset/introduction.rst
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,16 @@ simple. Hardcoding URLs can be a disadvantage because:
asset. When using the Asset component, you can group assets in packages to
avoid repeating the common part of their path;
* **Versioning is difficult**: it has to be custom managed for each
application. Adding a version to the asset URLs is essential for some applications
because it allows to control how the assets are cached. The Asset component
allows to define different versioning strategies for each package;
application. Adding a version (e.g. ``main.css?v=5``) to the asset URLs
is essential for some applications because it allows you to control how
the assets are cached. The Asset component allows you to define different
versioning strategies for each package;
* **Moving assets location** is cumbersome and error-prone: it requires you to
carefully update the URLs of all assets included in all templates. The Asset
component allows to move assets effortlessly just by changing the base path
value associated with the package of assets;
* **It's nearly impossible to use multiple CDNs**: this technique requires to
change the URL of the asset randomly for each request. The Asset component
* **It's nearly impossible to use multiple CDNs**: this technique requires
you to change the URL of the asset randomly for each request. The Asset component
provides out-of-the-box support for any number of multiple CDNs, both regular
(``http://``) and secure (``https://``).

Expand Down Expand Up @@ -65,7 +66,7 @@ any versioning::
echo $package->getUrl('/image.png');
// result: /image.png

Packages implement the :class:`Symfony\\Component\\Asset\\PackageInterface`,
Packages implement :class:`Symfony\\Component\\Asset\\PackageInterface`,
which defines the following two methods:

:method:`Symfony\\Component\\Asset\\PackageInterface::getVersion`
Expand All @@ -74,18 +75,27 @@ which defines the following two methods:
:method:`Symfony\\Component\\Asset\\PackageInterface::getUrl`
Returns an absolute or root-relative public path.

With a package, you can:

A) :ref:`version the assets <component-assets-versioning>`;
B) set a :ref:`common base path (e.g. /css) <component-assets-path-package>`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer moving (e.g. /css) outside the reference and put the directory name in a literal

for the assets;
C) :ref:`configure a CDN <component-assets-cdn>` for the assets
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

missing final stop

btw, why using an ordered list instead of an unordered list?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I LOVE ordered lists - they have the nice formatting of ordered but with little "reference" so we can refer to point "B" later if we want :)


.. _component-assets-versioning:

Versioned Assets
~~~~~~~~~~~~~~~~

One of the main features of the Asset component is to manage the versioning of
the application's assets. Asset versions are commonly used to control how these
assets are cached.
One of the main features of the Asset component is the ability to manage
the versioning of the application's assets. Asset versions are commonly used
to control how these assets are cached.

Instead of relying on a simple version mechanism, the Asset component allows to
define advanced versioning strategies via PHP classes. The two built-in strategies
provided by the component are :class:`Symfony\\Component\\Asset\\VersionStrategy\\EmptyVersionStrategy`,
Instead of relying on a simple version mechanism, the Asset component allows
you to define advanced versioning strategies via PHP classes. The two built-in
strategies are the :class:`Symfony\\Component\\Asset\\VersionStrategy\\EmptyVersionStrategy`,
which doesn't add any version to the asset and :class:`Symfony\\Component\\Asset\\VersionStrategy\\StaticVersionStrategy`,
which allows to set the version with a format string.
which allows you to set the version with a format string.

In this example, the ``StaticVersionStrategy`` is used to append the ``v1``
suffix to any asset path::
Expand Down Expand Up @@ -143,13 +153,15 @@ every day::
}
}

.. _component-assets-path-package:

Grouped Assets
~~~~~~~~~~~~~~

It's common for applications to store their assets in a common path. If that's
your case, replace the default :class:`Symfony\\Component\\Asset\\Package` class
by :class:`Symfony\\Component\\Asset\\PathPackage` to avoid repeating the same
path time and again::
Often, many assets live under a common path (e.g. ``/static/images``). If
that's your case, replace the default :class:`Symfony\\Component\\Asset\\Package`
class with :class:`Symfony\\Component\\Asset\\PathPackage` to avoid repeating
that path time and again::
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really "time and again" and not "time and time again"?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, to avoid repeating that path over and over again is much clearer in native English. Thanks for pointing this out :)


use Symfony\Component\Asset\PathPackage;
// ...
Expand All @@ -162,9 +174,9 @@ path time and again::
Request Context Aware Assets
............................

If you are also using the HttpFoundation component in your project, for example
in a Symfony application, the ``PathPackage`` class can take into account the
context of the current request::
If you are also using the :doc:`HttpFoundation</components/http_foundation/introduction>`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

missing space before <

component in your project (for example in a Symfony application), the ``PathPackage``
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"for instance, in a [...]"

class can take into account the context of the current request::

use Symfony\Component\Asset\PathPackage;
use Symfony\Component\Asset\Context\RequestStackContext;
Expand All @@ -180,9 +192,12 @@ context of the current request::
// result: /somewhere/static/images/logo.png?v1

When the request context is set (via an optional third argument), in addition to
the configured base path, ``PathPackage`` also prepends the current request base
URL (``/somewhere/`` in this example) to assets. This allows your website to be
hosted anywhere under the web server root directory.
the configured base path (i.e. ``/static/images``), ``PathPackage`` also
prepends the current request base URL. So, for example, if your entire site
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I find this first sentence really hard to understand. What about "Now the request context is set, the PathPackage prepends the current request base URL. So, for example, if your entire site is hosted under the /somewhere directory in your web server root directory and the configured base path is /static/images, all paths will be prefixed with /somewhere/static/images."

is hosted under the ``/somewhere`` directory in your web server root directory,
then ``/somewhere/`` will be prefixed to all paths.

.. _component-assets-cdn:

Absolute Assets and CDNs
~~~~~~~~~~~~~~~~~~~~~~~~
Expand All @@ -202,25 +217,44 @@ class to generate absolute URLs for their assets::
echo $package->getUrl('/logo.png');
// result: http://static.example.com/images/logo.png?v1

You can also pass a schema-agnostic URL::

use Symfony\Component\Asset\UrlPackage;
// ...

$package = new UrlPackage(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

strictly spoken, I don't think line wrapping is needed here.

'//static.example.com/images/',
new StaticVersionStrategy('v1')
);

echo $package->getUrl('/logo.png');
// result: //static.example.com/images/logo.png?v1

This is useful because assets will automatically be requested via https if
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

uppercased "HTTPS"

a visitor is viewing your site in https. Just make sure that your CDN host
supports https.

In case you serve assets from more than one domain to improve application
performance, pass an array of URLs as the first argument of ``UrlPackage``
performance, pass an array of URLs as the first argument to the ``UrlPackage``
constructor::

use Symfony\Component\Asset\UrlPackage;
// ...

$urls = array(
'http://static1.example.com/images/',
'http://static2.example.com/images/',
'//static1.example.com/images/',
'//static2.example.com/images/',
);
$package = new UrlPackage($urls, new StaticVersionStrategy('v1'));

echo $package->getUrl('/logo.png');
// result: http://static1.example.com/images/logo.png?v1
echo $package->getUrl('/icon.png');
// result: http://static2.example.com/images/icon.png?v1

The selection of the domain which will serve the asset is deterministic, meaning
that each asset will be always served by the same domain. This behavior simplifies
the management of HTTP cache.
For each asset, one of the URLs will be randomly used. But, the selection
is deterministic, meaning that each asset will be always served by the same
domain. This behavior simplifies the management of HTTP cache.

Request Context Aware Assets
............................
Expand All @@ -240,6 +274,7 @@ protocol-relative URLs for HTTPs requests, any base URL for HTTP requests)::
new RequestStackContext($requestStack)
);

// assuming the RequestStackContext says that we are on a secure host
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would put this just before the line containing // result:

echo $package->getUrl('/logo.png');
// result: https://example.com/logo.png?v1

Expand Down