Yii阅读笔记:
1.Yii2.0安装疑问:
Yii 2.0是在GitHub上托管的。这意味着一些什么样的问题?
2、路由
当入口脚本在调用 [[yii\web\Application::run()|run()]] 方法时,它进行的第一个操作就是解析输入的 请求,然后实例化对应的控制器操作处理这个请求
http://a.tsy.com/site/index/say?message=5555
http://a.tsy.com/user/login?returnUrl=%2Fuser%2Fdemand
项目中的中由结构:
http://a.tsy.com/模块/控制器名/方法名?参数名=参数值&参数名=参数值
如上面两个url
路由中没有指定方法名,则默认执行控制器中的index方法(默认访问方法可以在对应模块中Module.php中进行配置)
3、控制器与视图及相应目录的关系
视图中的分组文件夹的名称要求与当前操作的控制器名称一致。从文件结构的对应关系上来说,一个控制器在views目录中有对应的相同名称的子目录。在该目录下存放着这个控制器中方法需要调用的视图文件。
控制器向视图发送数据的格式如下:
Return $this->render(‘视图名称’,封装好数据的数组)。其结构如下:
return $this->render('test',['key'=>['a','b']]);
在视图页根据数组中封装的键取出对应的值。如:
Print($key);
4、模型与控制器及相应目录的关系
模型建在modules目录中。
一个模型目录创建的同时也,这个模型的命名空间就定形了。我们需要在模型目录下创建一个Module.php文件(文件名首字母大写)。将其命名空间按如下格式声名:
Namespace app\modules\模型名称;
其次还需要在该Module类中声名该模型对应的控制器的命名空间和指定缺省路由访问的默认方法名。
模型中的控制器,在命名上讲,他们之间没有依存关系,他们之间的关系由Module.php中声名的命名空间来体现。但值得注意的是,他同Module.php的命名都需要首字母大写。
如何看待使用场景中的
活动记录类
场景通过构造初始化配置来设置
$model = new User(['scenario' => 'login']);
模型
Yii中的模型并不强制一定要继承yii\base\Model,但是由于很多组件支持yii\base\Model,最好使用它做为模型基类。Model类也是更多高级模型如Active Record活动记录的基类。Model支持许多实用的特性:
属性: 代表可像普通类属性或数组 一样被访问的业务数据;
属性标签: 指定属性显示出来的标签;
块赋值: 支持一步给许多属性赋值;
验证规则: 确保输入数据符合所申明的验证规则;
数据导出: 允许模型数据导出为自定义格式的数组。
过滤器
过滤器可包含预过滤或后过滤,也可同时包含两者。
可以在控制器类中覆盖它的(yii\base/Controller::behaviors())方法来申明过滤器.
控制器类的过滤器默认应用到该类的所有动作,你可以配置only属性明确指定控制器应用 到哪些动作。也可以配置cxceptntnt ,使一些动作不执行过滤器。
除了控制器外,可在模块或应用主中申明过滤器。申明之后,过滤器会应用到所属该模块或应用 主体的所有控制器动作,除非像上述一样配置过滤器的only和except属性。
注:在模块 或应用主休中申明过滤器,在only和except属性中使用路由代替动作id ,因为在模块或应用主休中只用运作id并不能唯一指定到动作。
当一个动作有多个过滤器时,根据以下规则先后执行:
A预过滤
按顺序执行应用主体中behaviors() 列出的过滤器。
按顺序执行模块中behaviors()列出的过滤器。
按顺序执行控制器中behaviors()列出的过滤器。
注:如果任意过滤器终止动作执行,后面的所有过滤器都不再执行。
B成功能过参见过滤 后执行动作。
C后过滤
倒序执行控制器中behaviors()列出的过滤器。
倒序执行模块中behaviors()列出的过滤器。
倒序执行应用主体中behaviors()列出的过滤器。
小部件
小部件是在视图中使用的可重用单元。使用面向对象方式创建复杂和可配置用户界面单元。如日期选择器可生成一个精致的允许用户选择日期的日期选择器,只需要在视图中插入如下代码 :
= DatePicker::widget(['name' => 'date']) ?>
使用小部件
小部件基上在views中使用,在视图中可调用yii
资源
Yii中的资源是和web页面相关的文件,可为css,javascript,图片或视频,资源放在能直接被 web服务器调用
资源依赖
当web 页面包含多个css或javaScript文件时,它们有一定的先后顺序以避免属性覆盖。
资源选项
可指定cssOptions 和 jsOptions 属性来自定义页面包含CSS和JavaScript文件的方式, 在视图 调用这些方法包含CSS和JavaScript文件时, 这些属性值会分别传递给 yii\web\View::registerCssFile() 和 yii\web\View::registerJsFile() 方法。
在资源包类中设置 的选项会应用到该包中每个css/javascript文件,如果想对每个文件使用不同的选项,应创建不同的资源包并在每个包中使用一个选项集。
路由
URL管理器支持两种URL格式,:默认的URL格式美化的URL格式。
例如,URL/index.php?r=post/view&id=100表示路径/视图和id查询参数100。默认的URL格式不需要
缺省路由:
如果传入的请求并没有提供一个具体的路由,就会启用由yii\web\Application::$defaultRoute属性指定的缺省路由。可以在 应用配置中调整该属性的值如:return[‘defaultRoute’=>’main/index’]
全拦截路由:
让所有的请求都显示相同 的信息页。在应用配置中设置如下:
Return [‘catchAll’=>[‘site/offline’]]
配置使用美化的url
要使用美化的url需要在应用配置中对urlManager进行如下配置:
[
'components' => [
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => false, //使用绝对路径解析
'rules' => [
// ...
],
],
],
]
请求
应用的请求用yii\web\Request对象来表示。
Request对象实例化如下:
$request = yii::$app->request;
如何获取请求参数:
要获取请求参数,可以调用request组件的get()方法和post()方法。他们分别返回$_GET和$_post的值。如下:
$requset = Yii::$app->request;
$get = $request->get();
当实现RESTfulAPIs接口的时候,可以通过调用yii\web\Request::getBodyParam()方法来获取这些参数。如:
$request = Yii::$app->request;
//返回所有参数
$params = $request->bodyParams;
//返回参数 ‘id’
$param = $request-> getBodyParam(‘id’);
注:与get 参数不同。Post,put,patch等这些参数是在请求体中发送的。
请求方法
可以通过Yii::$app->request->method表达式获取当前请求使用的http方法。
请求 URLs
Request组件提供了许多方式 来检测当前请求的URL.
浏览器跳转
浏览器跳转依赖于发送一个location HTTP头。可调用yii\web\Response::redirect()方法将用户浏览器跳转到一个url地址。
如:
Public function actionOld(){
$response = yii::$app->Response;
$response -> redirect(‘http://www.baidu.com’);
}
也可调用缩写版yii\web\Controller::redirect(),如:
Public function actionOld(){
$this -> redirect(‘http://www.baidu.com’);
}
发送文件
发送文件是我们日常用到的下载文件的功能
发送响应
注: 在yii\web\$esponse::send()方法调用前响应中的内容不会发送给用户,该方法默认在yii\base\Application::ren()结尾自动调用,尽管如此,可以明确调用该方法强制立即发送响应。
Session
和请求与响应类似,默认可通过yii\web\Session实例的session应用组件来访问session
开启和关闭Session
$session = Yii::$app->session;
Flash数据
Flash数据是一种特别的session数据,它一旦在某个请求中设置后,只会在下次请求中有效,然后该数据就会自动 被 删除。
用到方法有:setFlash() getFlash() addFlash() hasFlash()
关键概念
组件是Yii应用 的主要基石。
给件是yii\base\Component类或基子类的实例。
与其它类相比它主要有以下三个不能的功能:
A、 属***件
C、 行为
数据库访问
创建数据库连接
想要访问数据库,首先需要通过创建一个yii\db\Connection实例来与之建立连接。
活动记录
活动记录的作用:用以访问数据库中的数据。
特点:1、AR类关联一张数据表。
2、每个AR对象对应表中的一行,以对象的属性映射到数据行的对应列。
3、一条活动记录对应数据表的一行。
4、AR对象的属性则映射该行的相应列。
声明AR类
要想声明一个AR类,需要扩展yii\db\ActiveRecord基类。并实现tableName方法,返回与之相关联的数据表 的名称。如:
Namespace app\models;
Use yii\db\ActiveRecord;
Class Customer extends ActiveRecord
{
Public static function tableName(){
Return ‘customer’;
}
}
如何配置不同的数据库连接?
AR查询数据
AR提供了两种方法来构建DB查询并向AR实例里填充数据:
Yii\db\active$