一直都在用yii1.1,也写过几个小项目,然后现在2.0出来了,懒得看文档重新学就直接用2.0照着别人写,最后还是写不下去了,想来从头好好看yii2.0。写这篇也算是笔记吧。
说说几个较大的改动点:
1. php 5.4的一些新特性都用上,包括命名空间,数组短语法等等。
2. 路径别名扩大至文件/目录路径和 URL,路径别名必须以 @ 符号开头,@yii 就是指向 Yii 安装目录的别名,Zend Framework,你只需定义一个名为 @Zend 的路径别名指向该框架的安装目录。
$model = new User(['scenario' => 'login']);
public function scenarios()
{
return [
'backend' => ['email', 'role'],//对于 backend 场景,email 和 role 属性值都是安全的,且能进行批量赋值
'frontend' => ['email', '!role'],
];
}
这些变化最明显的影响是,当你在写控制器操作的代码时,应该返回(return)要渲染的内容而不是输出(echo);
为了让框架获得更好的 IDE 支持,Yii 2.0 引进了一个调用小部件的新语法。包含 yii\base\Widget::begin(),yii\base\Widget::end() 和 yii\base\Widget::widget() 三个静态方法
一个表单栏是一个由标签、输入框、错误消息(可能还有提示文字)组成的容器,被表示为一个 yii\widgets\ActiveField 对象。
Yii 2.0 以 yii\db\Query 对象的形式表示一个数据库查询,这个对象使用 yii\db\QueryBuilder 在幕后生成 SQL 语句
通过归档文件安装,修改 config/web.php 文件,给 cookieValidationKey 配置项添加一个密钥,这段不能遗忘。
‘cookieValidationKey’ => ‘在此处输入你的密钥’,
————————–不是新特性———————————
入口文件在浏览器底部可以看到一个工具栏。这是 Yii 提供的很有用的调试工具,可以记录并显示大量的调试信息,例如日志信息,响应状态,数据库查询等等。
用户向入口脚本 web/index.php 发起请求。
入口脚本加载应用配置并创建一个应用实例去处理请求。
应用通过请求组件解析请求的路由。
应用创建一个控制器实例去处理请求。
控制器创建一个操作实例并针对操作执行过滤器。
如果任何一个过滤器返回失败,则操作退出。
如果所有过滤器都通过,操作将被执行。
操作会加载一个数据模型,或许是来自数据库。
操作会渲染一个视图,把数据模型提供给它。
渲染结果返回给响应组件。
响应组件发送渲染结果给用户浏览器。
message 参数在输出之前被 yii\helpers\Html::encode() 方法处理过。这很有必要,当参数来自于最终用户时,参数中可能隐含的恶意 JavaScript 代码会导致跨站脚本(XSS)攻击。
<?php
use yii\helpers\Html;
?>
<?= Html::encode($message) ?>
<?= Html::encode("{$country->name} ({$country->code})") ?>
if ($model->load(Yii::$app->request->post()) && $model->validate()) //$model->load(Yii::$app->request->post() Yii 2.0 里面使用
入口脚本主要完成以下工作:
定义全局常量;
注册 Composer 自动加载器;
包含 Yii 类文件;
加载应用配置;
创建一个应用实例并配置;
调用 yii\base\Application::run() 来处理请求。
配置路径别名
[
'aliases' => [
'@name1' => 'path/to/path1',
'@name2' => 'path/to/path2',
],
]
该属性允许你指定一个控制器ID到任意控制器类。Yii遵循一个默认的 规则指定控制器ID到任意控制器类,该属性指定控制器类默认的命名空间,默认为app\controllers。
[
'controllerMap' => [
[
'account' => 'app\controllers\UserController',
'article' => [
'class' => 'app\controllers\PostController',
'enableCsrfValidation' => false,
],
],
],
]
该属性提供一种方式修改PHP运行环境中的默认时区,配置该属性本质上就是调用PHP函数 date_default_timezone_set()
[
'timeZone' => 'America/Los_Angeles',
]
谨慎注册太多应用组件,应用组件就像全局变量,使用太多可能加大测试和维护的难度。 一般情况下可以在需要时再创建本地组件。
命名空间:
article 对应 app\controllers\ArticleController;
post-comment 对应 app\controllers\PostCommentController;
admin/post-comment 对应 app\controllers\admin\PostCommentController
设置默认控制器
'defaultRoute' => 'main',