Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Improving "The Quick Tour" tutorial #3562

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

Closed
wants to merge 31 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
0b442c7
[quick_tour] simplified drastically the first two sections of "The Bi…
javiereguiluz Jan 30, 2014
6e5a6a2
[quick_tour] simplified the "routing" section
javiereguiluz Jan 31, 2014
63f671c
[quick_tour] updated the "Controllers" section
javiereguiluz Jan 31, 2014
8a1db94
[quick_tour] updated some screenshots
javiereguiluz Jan 31, 2014
b6c1721
[quick_tour] finished the review of "The Big Picture" chapter
javiereguiluz Jan 31, 2014
7c8c38c
[quick_tour] updated "the view" chapter
javiereguiluz Feb 1, 2014
be8787c
[quick tour] simplified "the controller" chapter
javiereguiluz Feb 1, 2014
3a2fd71
[quick_tour] simplified "the architecture" chapter
javiereguiluz Feb 1, 2014
f48cbf1
[quick_tour] second pass to the "big picture" chapter
javiereguiluz Feb 3, 2014
905e3e6
[quick tour] second pass to "the view" chapter
javiereguiluz Feb 3, 2014
cce8145
[quick_tour] second pass to "the controller" chapter and
javiereguiluz Feb 4, 2014
1e1deb0
[quick_tour] second pass to "the architecture" chapter
javiereguiluz Feb 4, 2014
f57ad39
[quick_tour] replaced "chapter" by "part" in some tutorial parts
javiereguiluz Feb 4, 2014
0d4da93
[quick_tour] removed inline links
javiereguiluz Feb 9, 2014
deced02
Bundle names should not be placed in literals
javiereguiluz Feb 9, 2014
53ba9d5
Removed a wrongly inserted comma
javiereguiluz Feb 9, 2014
4a4635d
When using server:run command, it's not necessary to add the `app_dev…
javiereguiluz Feb 9, 2014
89c7dd3
Capitalized some sentences that come after a colon
javiereguiluz Feb 9, 2014
bd1fc95
Added a new headline to better structure the documentation
javiereguiluz Feb 9, 2014
7cfc1d9
Minor rewording
javiereguiluz Feb 9, 2014
a22d663
Fixed the capitalization of a section heading
javiereguiluz Feb 9, 2014
9f04dae
Replaced "variable" by "placeholder" when using {_format} inside a route
javiereguiluz Feb 9, 2014
f810f4a
Removed the animated GIF showing how to install Symfony
javiereguiluz Feb 9, 2014
cef3103
Added a more useful message for users that don't have PHP 5.4
javiereguiluz Feb 16, 2014
1ed3dc9
Grammar fixes proposed by @weaverryan and @WouterJ
javiereguiluz Feb 16, 2014
c7d3fac
Restored the original line that explained how a routing file is imported
javiereguiluz Feb 16, 2014
fa1d018
Restored all the original introductions for each tutorial part
javiereguiluz Feb 16, 2014
304d4ce
[quick_tour] rewording and grammar fixes suggested by @weaverryan
javiereguiluz Feb 18, 2014
3b430f8
[quick_tour] more rewording and grammar fixes
javiereguiluz Feb 18, 2014
c911698
[quick_tour] removed an unneeded comma
javiereguiluz Feb 18, 2014
ef88ae2
[quick_tour] rewording and grammar fixes noted by @xabbuh
javiereguiluz Feb 19, 2014
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
Binary file modified images/quick_tour/hello_fabien.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified images/quick_tour/profiler.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified images/quick_tour/web_debug_toolbar.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified images/quick_tour/welcome.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
61 changes: 27 additions & 34 deletions quick_tour/the_architecture.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,12 @@ Understanding the Directory Structure
-------------------------------------

The directory structure of a Symfony2 :term:`application` is rather flexible,
but the directory structure of the *Standard Edition* distribution reflects
the typical and recommended structure of a Symfony2 application:
but the recommended structure is as follows:

* ``app/``: The application configuration;
* ``src/``: The project's PHP code;
* ``vendor/``: The third-party dependencies;
* ``web/``: The web root directory.
* ``app/``: the application configuration;
* ``src/``: the project's PHP code;
* ``vendor/``: the third-party dependencies;
* ``web/``: the web root directory.

The ``web/`` Directory
~~~~~~~~~~~~~~~~~~~~~~
Expand All @@ -36,11 +35,10 @@ lives::
$kernel->loadClassCache();
$kernel->handle(Request::createFromGlobals())->send();

The kernel first requires the ``bootstrap.php.cache`` file, which bootstraps
the framework and registers the autoloader (see below).

Like any front controller, ``app.php`` uses a Kernel Class, ``AppKernel``, to
bootstrap the application.
The controller first bootstraps the application using a kernel class (``AppKernel``
in this case). Then, it creates the ``Request`` object using the PHP's global
variables and passes it to the kernel. The last step is to send the response
contents returned by the kernel back to the user.

.. _the-app-dir:

Expand All @@ -59,17 +57,11 @@ This class must implement two methods:
(more on this later).

Autoloading is handled automatically via `Composer`_, which means that you
can use any PHP classes without doing anything at all! If you need more flexibility,
you can extend the autoloader in the ``app/autoload.php`` file. All dependencies
can use any PHP class without doing anything at all! All dependencies
are stored under the ``vendor/`` directory, but this is just a convention.
You can store them wherever you want, globally on your server or locally
in your projects.

.. note::

If you want to learn more about Composer's autoloader, read `Composer-Autoloader`_.
Symfony also has an autoloading component - read ":doc:`/components/class_loader/class_loader`".

Understanding the Bundle System
-------------------------------

Expand All @@ -79,12 +71,13 @@ Symfony2, the :term:`bundle` system.
A bundle is kind of like a plugin in other software. So why is it called a
*bundle* and not a *plugin*? This is because *everything* is a bundle in
Symfony2, from the core framework features to the code you write for your
application. Bundles are first-class citizens in Symfony2. This gives you
the flexibility to use pre-built features packaged in third-party bundles
or to distribute your own bundles. It makes it easy to pick and choose which
features to enable in your application and optimize them the way you want.
And at the end of the day, your application code is just as *important* as
the core framework itself.
application.

Bundles are first-class citizens in Symfony2. This gives you the flexibility
to use pre-built features packaged in third-party bundles or to distribute your
own bundles. It makes it easy to pick and choose which features to enable in
your application and optimize them the way you want. And at the end of the day,
your application code is just as *important* as the core framework itself.

Registering a Bundle
~~~~~~~~~~~~~~~~~~~~
Expand Down Expand Up @@ -119,14 +112,14 @@ a single ``Bundle`` class that describes it::

In addition to the AcmeDemoBundle that was already talked about, notice
that the kernel also enables other bundles such as the FrameworkBundle,
DoctrineBundle, SwiftmailerBundle, and AsseticBundle bundle.
They are all part of the core framework.
DoctrineBundle, SwiftmailerBundle and AsseticBundle bundle. They are all part
of the core framework.

Configuring a Bundle
~~~~~~~~~~~~~~~~~~~~

Each bundle can be customized via configuration files written in YAML, XML, or
PHP. Have a look at the default configuration:
PHP. Have a look at the default Symfony configuration:

.. code-block:: yaml

Expand Down Expand Up @@ -191,9 +184,9 @@ PHP. Have a look at the default configuration:
password: "%mailer_password%"
spool: { type: memory }

Each entry like ``framework`` defines the configuration for a specific bundle.
For example, ``framework`` configures the FrameworkBundle while ``swiftmailer``
configures the SwiftmailerBundle.
Each first level entry like ``framework``, ``twig`` or ``doctrine`` defines the
configuration for a specific bundle. For example, ``framework`` configures the
FrameworkBundle while ``swiftmailer`` configures the SwiftmailerBundle.

Each :term:`environment` can override the default configuration by providing a
specific configuration file. For example, the ``dev`` environment loads the
Expand Down Expand Up @@ -268,7 +261,7 @@ Extending Bundles

If you follow these conventions, then you can use :doc:`bundle inheritance</cookbook/bundles/inheritance>`
to "override" files, controllers or templates. For example, you can create
a bundle - ``AcmeNewBundle`` - and specify that it overrides AcmeDemoBundle.
a bundle - AcmeNewBundle - and specify that it overrides AcmeDemoBundle.
Copy link
Member

Choose a reason for hiding this comment

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

Maybe we shouldn't say that a bundles overrides another bundle but instead extends a parent bundle?

Copy link
Member

Choose a reason for hiding this comment

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

No, we have explicitely changed this from parent to override (one of my first doc contributions) as there is no parent/child relation, the getParent method is confusing and only there as it means a big BC change.

More information in symfony/symfony#4347 and the related doc PR and fabian's commit

Copy link
Member

Choose a reason for hiding this comment

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

Ah, thanks for the clarification.

When Symfony loads the ``AcmeDemoBundle:Welcome:index`` controller, it will
first look for the ``WelcomeController`` class in AcmeNewBundle and, if
it doesn't exist, then look inside AcmeDemoBundle. This means that one bundle
Expand Down Expand Up @@ -296,8 +289,9 @@ each request? The speed is partly due to its cache system. The application
configuration is only parsed for the very first request and then compiled down
to plain PHP code stored in the ``app/cache/`` directory. In the development
environment, Symfony2 is smart enough to flush the cache when you change a
file. But in the production environment, it is your responsibility to clear
the cache when you update your code or change its configuration.
file. But in the production environment, to speed things up, it is your
responsibility to clear the cache when you update your code or change its
configuration.

When developing a web application, things can go wrong in many ways. The log
files in the ``app/logs/`` directory tell you everything about the requests
Expand Down Expand Up @@ -336,4 +330,3 @@ topics now? Look no further - go to the official :doc:`/book/index` and pick
any topic you want.

.. _Composer: http://getcomposer.org
.. _`Composer-Autoloader`: http://getcomposer.org/doc/01-basic-usage.md#autoloading
Loading