structure-mvc.md 3.32 KB
Newer Older
Qiang Xue committed
1 2 3 4
MVC Overview
============

Yii implements the model-view-controller (MVC) design pattern, which is
Larry Ullman committed
5
widely adopted in Web and other application programming. MVC aims to separate business logic from
Larry Ullman committed
6
user interface considerations, allowing developers to more easily change one component of an application without affecting, or even touching, another.
7

Larry Ullman committed
8
In MVC, the *model* represents both the
9 10
information (the data) and the business rules to which the data must adhere. The *view* contains elements
of the user interface, such as text, images, and form elements. The *controller* manages
Larry Ullman committed
11
the communication between the model and the view, acting as an agent that handles actions and requests.
12 13

Besides implementing the MVC design pattern, Yii also introduces a *front-controller*, called
14
*application*. The front-controller encapsulates the *execution context* for the processing of a request. This means that the front-controller collects information about a user request, and
Larry Ullman committed
15
then dispatches it to an appropriate controller for the actual handling of that request. In other words, the front-controller is the primary application manager, handling all requests and delegating action accordingly.
Qiang Xue committed
16 17 18

The following diagram shows the static structure of a Yii application:

19
![Static structure of Yii application](images/structure.png)
Qiang Xue committed
20 21 22 23


A Typical Workflow
------------------
Alexander Makarov committed
24

25
The following diagram shows a typical workflow of a Yii application  handling a user request:
Qiang Xue committed
26

27 28 29
![Typical workflow of a Yii application](images/flow.png)

1. A user makes a request of the URL `http://www.example.com/index.php?r=post/show&id=1`.
Larry Ullman committed
30
   The Web server handles the request by executing the bootstrap script `index.php`.
31
2. The bootstrap script creates an [[yii\web\Application|Application]] instance and runs it.
32 33 34
3. The Application instance obtains the detailed user request information from an application component named `request`.
4. The application determines which [controller](controller.md) and which action of that controller was requested.
   This is accomplished with the help of an application component named `urlManager`.
Larry Ullman committed
35
   For this example, the controller is `post`, which refers to the `PostController` class, and the action is `show`,
36
   whose actual meaning is determined by the controller.
Larry Ullman committed
37
5. The application creates an instance of the requested controller to further handle the user's request.
38
   The controller determines that the action `show` refers to a method named `actionShow` in the controller class.
Larry Ullman committed
39
   The controller then creates and executes any filters associated with this action (e.g. access control or benchmarking).
40 41 42
   The action is then executed, if execution is allowed by the filters (e.g., if the user has permission to execute that action).
6. The action creates a `Post` [model](model.md) instance, using the underlying database table, where the ID value of the corresponding record is `1`.
7. The action renders a [view](view.md) named `show`, providing to the view the `Post` model instance.
43
8. The view reads the attributes of the `Post` model instance and displays the values of those attributes.
44
9. The view executes some [widgets](view.md#widgets).
Larry Ullman committed
45
10. The view rendering result--the output from the previous steps--is embedded within a [layout](view.md#layout) to create a complete HTML page.
46
11. The action completes the view rendering and displays the result to the user.