ThinkPHP is based on the MVC (Model-View-Controller, Model-View-Controller) pattern, and supports multi-layer (multi-Layer) design.
Model layer
The default model layer is composed of the Model class, but as the project grows and the business system becomes more complex, a single model layer is very It is difficult to solve the requirements. ThinkPHP supports multi-layer Model. The design idea is very simple. Different model layers still inherit from the system's Model class, but they are distinguished in the directory structure and naming convention.
Related recommendations: "ThinkPHP Tutorial"
For example, in a certain project design, it is necessary to distinguish between data layer, logic layer, and service Layer and other different model layers, we can create Model, Logic and Service directories under the module directory, and divide all model operations on the user table into three layers:
1. Data layer: Model/UserModel is used to define Data-related automatic verification and automatic completion and data access interface
2. Logic layer: Logic/UserLogic is used to define user-related business logic
3. Service layer: Used by Service/UserService For defining user-related service interfaces, etc.
The three model operation classes can all inherit the Model class, for example:
Data layer:
Home/Model/UserModel.class.php namespace Home\Model; use Think\Model; class UserModel extends Model{ }
Logical layer:
Home/Logic/UserLogic.class.php namespace Home\Logic; use Think\Model; class UserLogic extends Model{ }
Service layer: Home/Service/UserService.class.php
namespace Home\Service; use Think\Model; class UserService extends Model{ }
After distinguishing different model layers, the operation of user data will be very clear. When calling, we can also It is very convenient to call with the built-in D method:
D(‘User‘) //实例化UserModel D(‘User‘,‘Logic‘) //实例化UserLogic D(‘User‘,‘Service‘) //实例化UserService
The default model layer is Model, we can also change the settings, for example:
‘DEFAULT_M_LAYER‘ => ‘Logic‘, // 更改默认的模型层名称为Logic
After the change, when instantiating, it needs to be changed to:
D(‘User‘) //实例化UserLogic D(‘User‘,‘Model‘) //实例化UserModel D(‘User‘,‘Service‘) //实例化UserService
The hierarchical division of the model layer is very flexible. Developers can freely define and add model hierarchies according to the needs of the project. You can also only use the Model layer.
View (View) layer
The view layer consists of templates and template engines. PHP code can be used directly in the templates. The design of the template engine will be in As described later, other third-party template engines can also be supported through drivers. Multi-layer views can be simply distinguished by directories (that is, template themes), for example:
View/default/User/add.html View/blue/User/add.html
More complex multi-layer views can be further completed by using different view directories, for example:
view 普通视图层目录 mobile 手机端访问视图层目录
The advantage of this is that each different view layer can support different template theme functions.
The default view layer is the View directory. We can adjust the settings as follows:
‘DEFAULT_V_LAYER‘ => ‘Mobile‘, // 默认的视图层名称更改为Mobile
To obtain the template of the non-default view layer directory, you need to use the T function, which will be discussed later.
Controller layer
The controller layer of ThinkPHP consists of core controller and business controller. The core controller is completed by the App class inside the system. Responsible for the scheduling control of applications (including modules, controllers and operations), including HTTP request interception and forwarding, loading configuration, etc. The business controller is completed by a user-defined controller class. The implementation principle of multi-layer business controller is similar to the layering of models, such as business controller and event controller:
Controller/UserController //用于用户的业务逻辑控制和调度 Event/UserEvent //用于用户的事件响应操作
Access controller Home/Controller/UserController.class.php is defined as follows:
namespace Home\Controller; use Think\Controller; class UserController extends Controller{ }
Event controller Home/Event/UserEvent.class.php is defined as follows:
namespace Home\Event; use Think\Controller; class UserEvent extends Controller{ }
UserController is responsible for external interactive response and responds through URL request, such as http://serverName/User/index, UserEvent is responsible for internal event response and can only be called internally:
A(‘User‘,‘Event‘);
The default access controller layer is Controller. We can adjust the settings as follows:
‘DEFAULT_C_LAYER‘ => ‘Event‘, // 默认的控制器层名称改为Event
So it is isolated from the outside.
The division of multi-layer controllers is not mandatory and can be freely layered according to the needs of the application. In the controller layer, you can call the layered model as needed, or you can call different layered views (themes).
In the three layers of MVC, ThinkPHP does not rely on M or V. It can even only have C or only V. This is a very important user experience design in ThinkPHP design. The user only needs to define the view. It can be automatically recognized even without C.
The above is the detailed content of What does mvc in thinkphp stand for. For more information, please follow other related articles on the PHP Chinese website!