Yii2学习笔记系列12——Application Structure-Models(应用结构之模型)
模型
模型是MVC设计模式中的一部分,是代表业务数据、规则和逻辑的对象。我们可以通过继承yii\base\Model或它的子类定义模型类,基类yii\base\Model支持许多实用的特性:
- 属性(Attributes):代表业务数据,可以像普通类属性或者数组一样被访问;
- 属性标签(Attribute labels):为属性指定的展示标签
- 块赋值(Massive assignment):支持一步内给多个属性同时赋值
- 验证规则(Validation rules):确保输入的数据都是通过了验证规则的
- 数据导出(Data Exporting):允许模型数据导出为自定义格式的数组
Model
类也是更多高级模型例如Active Record活动记录类的基类,更多关于高级模型的详情请参考相关手册。
注意:模型并不强制一定要继承yii\base\Model,但是由于很多组件支持yii\base\Model,所以最好使用它作为模型基类。
属性
模型通过属性来代表业务数据,每个属性都像是模型的公有可访问属性,yii\base\Modell::attributes()方法制定了模型类包含的属性 ...
comments
Read More
Yii2学习笔记系列11——Application Structure-Controllers(应用结构之控制器)
控制器
控制器是MVC设计模式的一部分,继承自yii\base\Controller并且负责处理请求生成响应。具体的来说,当控制器从应用主体接管控制后会分析请求数据并传送到模型,将模型结果注入到视图中,并且最终生成输出的响应信息。
操作
“操作”是执行终端用户请求的最基础的单元,一个控制器中可以包含一个或多个操作。
如下示例展示了一个名为post
的控制器,其中包含两个操作:view
和create
。
<?php
namespace app\controllers;
use Yii;
use app\models\Post;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
class PostController extends Controller
{
public function actionView($id)
{
$model = Post::findOne($id ...
comments
Read More
Yii2学习笔记系列10——Application Structure-Application Components(应用结构之应用组件)
应用组件
应用主体都是服务定位器,他们部署一系列的应用组件,用来提供可以处理请求的多个服务,例如,urlManager
组件负责处理网页请求路由到对应的控制器,db
组件提供数据库相关服务等。
在一个应用主体中,每个应用组件都包含一个唯一的ID用以区分其他的应用组件。你可以通过如下表达式访问应用组件:
例如你可以通过\Yii::$app->db
获取数据库连接,通过\Yii::$app->cache
获取已经注册到应用的yii\caching\Cache。
一个应用组件实例会在通过上述表达式第一次访问的时候创建,后续访问的时候将会返回同一个组件实例。
应用组件可以是任意对象,你可以通过配置应用配置文件中的yii\base\Application::$components
属性来注册组件,例如:
<?php
[
'components' => [
// 通过类名注册cache组件
'cache' => 'yii\caching\ApcCache',
//通过配置数组注册db组件
'db' => [
'class' => 'yii\db ...
comments
Read More
Yii2学习笔记系列9——Application Structure-Applications(应用结构之应用)
Yii2学习笔记系列9——Application Structure-Applications(应用结构之应用)
应用主体
应用主体是管理Yii应用系统整体结构和声明周期的对象,每个Yii应用系统只能包含一个应用主体,应用主体在入口脚本中创建,并且可以通过表达式\Yii::$app
全局范围内访问。
Yii有两种应用主体:yii\web\Application
和yii\console\Application
,分别用来处理网页请求和控制台请求。
应用主体配置
如下所示,当入口脚本创建了一个应用主体,它会加载一个配置文件并传给应用主体。
<?php
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
// 加载应用主体配置
$config = require(__DIR__ . '/../config/web.php');
// 实例化应用主体、配置应用主体
(new yii\web ...
comments
Read More
Yii2学习笔记系列8——Application Structure-Entry Scripts(应用结构之入口脚本)
Yii2学习笔记系列8——Application Structure-Entry Scripts(应用结构之入口脚本)
入口脚本
入口脚本是应用启动流程中的第一步,一个应用只有一个入口脚本,终端用户的请求通过入口脚本实例化应用并将请求转发到应用。
Yii中Web应用的入口脚本存放在终端用户可以访问的目录下,名为index.php
,当然,我们也可以使用Web服务器定位到其他名称的文件。
Yii中Console应用的入口脚本在应用根目录下,名为yii
(格式为.php文件),该文件需要有执行权限,这样儿用户就可以通过命令./yii <route> [arguments] [options]
来运行Console应用了。
入口脚本主要用来完成以下的工作:
- 定义全局常量;
- 注册Composer自动加载器;
- 包含Yii类文件;
- 加载应用配置;
- 创建并配置一个应用的实例;
- 调用
yii\base\Application::run()
来处理请求。
Web应用
以下是基础应用模板入口脚本的代码:
<?php
// 当部署到生产环境时,注释掉下面的两行
defined('YII_DEBUG') or define('YII_DEBUG ...
comments
Read More
Yii2学习笔记系列7——Application Structure-Overview(应用结构之总览)
Yii2学习笔记系列7——Application Structure-Overview(应用结构之总览)
在上一篇中我们学习了如何使用Gii来生成常用的CRUD功能代码,对于入门来说是足够了的,但是远远不能应对开发,为了能够更好的使用Yii进行程序开发,我们需要对Yii应用有足够深入的了解,从这篇开始,我们将会深入学习,了解Yii的应用结构,包括应用的结构组成、入口脚本、组件、控制器、模型、视图等等。
总览
Yii是通过MVC设计模式来组织的应用,即Model(模型)、View(视图)、Controller(控制器),模型代表数据、业务逻辑和规则;视图展示模型的输出;控制器接受输入并将其转换为模型和视图命令。
除了模型、视图和控制器之外,Yii应用主要还包括以下部分:
- 入口脚本: 终端用户能够直接访问的PHP脚本,在Yii中指的是
web/index.php
文件
- 应用: 能够在全局范围内被访问的对象,用以管理协调组件来完成请求
- 应用组件: 在应用中注册的对象,提供各种功能来完成请求
- 模块: 包含完整MVC结构的独立包,一个应用可以包含N多个模块
- 过滤器 ...
comments
Read More
Yii2学习笔记系列6——Generating Code With Gii(使用Gii生成代码)
Yii2笔记系列6——Generating Code With Gii(使用Gii生成代码)
在上一篇学习笔记中,我们学习了如何连接数据库以及如何编写查询代码来分页读取数据库记录,这篇我们来学习一下如何通过Gii生成这些功能的代码。使用Gii生成代码非常简单,只要按照Gii页面上的介绍信息输入正确的信息即可。
本篇中,我们将要学习到的知识点有:
- 在应用中开启Gii
- 使用Gii生成活动记录类
- 使用Gii生成数据表操作的增查删改(CRUD)代码
- 自定义Gii生成的代码
开启Gii
Gii是Yii中的一个模块,可以通过yii\base\Application::modules
属性开启它,通常的,在config/web.php
文件中会有以下的配置代码:
<?php
if (YII_ENV_DEV) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'yii\debug ...
comments
Read More
Yii2学习笔记系列5——Working With Database(使用数据库)
Yii2笔记系列5——Working With Database(使用数据库)
上一篇中我们学习了如何使用Form表单,掌握了Form表单的提交以及在Yii中通过视图展示提交内容的技能,这一篇我们来学习一下如何创建一个从数据表country
中读取国家数据并显示出来的页面,为此,我们需要配置一个数据库连接,创建一个活动记录类,并且创建一个操作和一个视图。
通过这篇,我们将会学习到的:
- 配置一个数据库连接
- 定义一个活动记录类
- 使用活动记录类从数据库中查询数据
- 以分页的方式在视图中显示数据
准备数据库
首先创建一个名为yii2basic
的数据库,应用将从这个数据库中读取数据,Yii中内置了多种数据库支持,这里我们使用最常见的MySQL数据库。以下是MySQL的建表语句:
CREATE TABLE `country` (
`code` CHAR(2) NOT NULL PRIMARY KEY,
`name` CHAR(52) NOT NULL,
`population` INT(11) NOT NULL DEFAULT ...
comments
Read More
Yii2学习笔记系列4——Working With Forms(使用Form表单)
Yii2笔记系列4——Wroking With Forms(使用Form表单)
本章节的主要学习目标是学习如何创建一个可以让用户输入数据并提交的表单页,该页面会显示一个包含姓名输入框和Email输入框的表单,当用户提交这两部分信息后,页面将会显示用户输入的信息。
为了实现这个目标,我们需要创建一个action、两个视图以及一个模型。
创建模型
这里我们在basic/models
下创建一个名为EntryForm
的模型类,代表从用户请求的数据,具体代码如下:
<?php
/**
* Created by PhpStorm.
* User: 赵振棠
* Date: 16/4/6
*/
namespace app\models;
use yii\base\Model;
class EntryForm extends Model
{
public $user_name;
public $user_email;
public function rules()
{
return ...
comments
Read More
Yii2学习笔记系列3——Hello World
Yii2笔记系列3——Hello World
上一篇笔记中简单介绍了Yii的内建功能、如何组织代码以及一般情况下应用如何处理请求,这一篇我们进入熟悉的实现一个“Hello World”的功能,为了实现这一目标,我们需要创建一个操作和一个视图:
- Yii应用会将页面请求分派给相应的action
- action将会依次渲染视图,呈现“Hello World”给最终用户
创建action
我们这里直接在controllers/SiteController.php
中定义一个名为hello
的action,以下是主要的代码:
<?php
namespace app\controllers;
use yii\web\Controller;
class SiteController extends Controller
{
// ...其它代码...
public function actionHello($message = 'Hello World')
{
return $this->render('hello', ['message ...
comments
Read More