-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathYii 2.txt
executable file
·183 lines (144 loc) · 7.38 KB
/
Yii 2.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
------------------------------------------------------------------- 第0章 入门 ----------------------------------------------------------------------------------
安装yii2:
composer global require "fxp/composer-asset-plugin:~1.1.1"
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
1.PHP内置服务器启动网站:
php yii serve --port=8888 // 默认是8080
*其实是使用的php内置Web Server:php -S 0.0.0.0:8888 -t /www
2.路径参数:
http://hostname/index.php?r=site/say&message=Hello+World
r=conroller/action&参数
3.Model均继承自 yii\db\ActiveRecord
4.应用的根目录:yii\base\Application::basePath
系统预定义@app代表这个路径
------------------------------------------------------------------- 第一章 基础 -----------------------------------------------------------------------------------
1.属性:
$object->property
1.如果对象中有定义public的变量property,则取该变量
2.中尝试查找getProperty方法,返回该哈数的返回值(框架中的__get()所作的工作)
isset($object->property) // 测试属性值是否不为null
unset($object->property) // 设置属性值为null
hasProperty()
canGetProperty() // 不管成员变量是public, protected还是private,都认为是可读的
canSetProperty()
2.Component
Component继承自Object,并支持事件和行为
*仅用作数据载体应该使用Object
3.对象初始化的4个阶段:
1.Object.__construct() // 预初始化阶段
2.Yii::configure($this, $config) // 对象配置阶段
3.init() // 后初始化阶段
4. // 类方法实际调用阶段
4.事件
Component内部操作Event来实现事件:
$person = new Person;
$person->on(Person::EVENTT_GREET, 'person_say_hello'); // 使用PHP全局函数作为handler来进行绑定
$person->on(Person::EVENT_GREET, [$obj, 'say_hello']); // 使用对象$obj的成员函数say_hello来进行绑定
$person->on(Person::EVENT_GREET, ['app\helper\Greet', 'say_hello']); // 使用类Greet的静态成员函数say_hello进行绑定
$person->on(Person::EVENT_GREET, function ($event) { // 使用匿名函数
echo 'Hello';
});
*event中的数据通过$event->data获取 // 事件绑定时的数据
*trigger中可以传入event对象 // 事件触发时的数据
*使用匿名函数时需要把匿名函数存为一个变量,使用这个变量去解绑,否则无法解绑
5.事件分示例事件、类事件和全局事件
*类事件需要使用Event::on来绑定
*全局事件即作用在Application实例上:Yii::$app->on();
6.行为
*Behavior只能和Component结合使用
$myClass->attachBehavior('myBehavior', $myBehavior);
*behavior中的$this是behavior本身,需要使用变量$owner来访问Component
7.静态方法绑定行为:
·重载yii\base\Component:behaviors():
public function behaviors()
{
return [
MyBehavior::className(), // 匿名的行为,仅直接给出行为的类名称
'myBehavior2' => MyBehavior::className(), // 名为myBehavior2的行为,也是仅给出行为的类名称
[ // 匿名行为,给出了MyBehavior类的配置数组
'class' => MyBehavior::className(),
'prop1' => 'value1',
'prop3' => 'value3',
],
'myBehavior4' => [ // 名为myBehavior4的行为,也是给出了MyBehavior类的配置数组
'class' => MyBehavior::className(),
'prop1' => 'value1',
'prop3' => 'value3',
]
];
}
·通过配置文件来绑定:
[
'as myBehavior2' => MyBehavior::className(),
'as myBehavior3' => [
'class' => MyBehavior::className(),
'prop1' => 'value1',
'prop3' => 'value3',
],
]
8.动态方法绑定行为:
$Component->attachBehaviors([
'myBehavior1' => new MyBehavior, // 这是一个命名行为
MyBehavior::className(), // 这是一个匿名行为
]);
9.通过名字获取绑定好的行为:
$behavior = $Component->getBehaviors('myBehavior'); //不传参数获取所有绑定好的行为
*匿名行为没有办法直接引用
10.绑定的内部原理
yii\base\Component::behaviors()
yii\base\Component::ensureBehaviors()
yii\base\Component::attachBehaviorInternal()
yi\base\Behavior::attach()
11.解除行为
yii\base\Component::detachBehavior(); // 不传参数解绑所有行为
12.Traits
php中的traits特性,也可以为class扩展方法
------------------------------------------------------------------- 第一章 约定 -----------------------------------------------------------------------------------
1.所有预定义的别名:
@yii 表示Yii框架所在的目录,也是 yii\BaseYii 类文件所在的位置;
@app 表示正在运行的应用的根目录,一般是 digpage.com/frontend ;
@vendor 表示Composer第三方库所在目录,一般是 @app/vendor 或 @app/../vendor ;
@bower 表示Bower第三方库所在目录,一般是 @vendor/bower ;
@npm 表示NPM第三方库所在目录,一般是 @vendor/npm ;
@runtime 表示正在运行的应用的运行时用于存放运行时文件的目录,一般是 @app/runtime ;
@webroot 表示正在运行的应用的入口文件 index.php 所在的目录,一般是 @app/web;
@web URL别名,表示当前应用的根URL,主要用于前端;
@common 表示通用文件夹;
@frontend 表示前台应用所在的文件夹;
@backend 表示后台应用所在的文件夹;
@console 表示命令行应用所在的文件夹;
其他使用Composer安装的Yii扩展注册的二级别名。
2.别名如果是一个根目录,就直接保存成字符串
如果是一个长路径则保存成一个数组:
Yii::setAlias('@foo', 'path/to/foo'); // 初始化,BaseYii::aliases['@foo'] = 'path/to/foo'
Yii::setAlias('@foo', 'path/to/foo2'); // 覆盖
Yii::setAlias('@foo/bar', 'path/to/foo/bar'); // 新增,保存成数组,长的别名会被放在前面
Yii::setAlias('@bar/qux', 'path/to/bar/qux'); // 初始化,保存成数组:BaseYii::aliases['@bar'] = ['@bar/qux' => 'path/to/bar/qux'];
Yii::setAlias('@bar/qux', 'path/to/bar/qux2'); // 覆盖,BaseYii::aliases['@bar'] = ['@bar/qux' => 'path/to/bar/qux2'];
Yii::setAlias('@bar/foo', 'path/to/bar/foo'); // 新增,数组中将有2个值
3.删除别名:
setAlias(key, null); // 传入null来删除别名
4.component配置项:
[
'class' => 'path\to\ClassName',
'propertyName' => 'propertyValue',
'on eventName' => $eventHandler,
'as behaviorName' => $behaviorConfig,
]
------------------------------------------------------------------- 第三章 请求与响应 -----------------------------------------------------------------------------------
1.urlManager常用配置项:
$enablePrettyUrl // 是否开启URL美化功能
$showScriptName // 是否在URL中显示入口脚本
suffix // 设置一个.html之类的假后缀,是对美化功能的进一步补充
rules // 保存路由规则们的声明
$enableStrictParsing // 是否开启严格解析
2.request中的常用方法
*获取request: $app->request
getIsAjax()
*还有IsDelete, IsFlash, IsGet, IsHead, IsOptions, IsPatch, IsPjax, IsPost, IsPut
get(name, default); // 获取get参数, 还有 getQueryParam, getQueryParams
*如果name为null,返回所有的get参数,实际调用的
post(name, default)
*同get, 还有getBodyParam, getBodyParams
getUrl()
getBaseUrl() // 所在文件夹