Yii2基础教程
编写与2018/7/7 适用Yii 2.0
安装
1. 通过composer安装(国内安装超级慢)
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
这将在一个名为 basic 的目录中安装Yii应用程序模板的最新稳定版本。
2. 通过归档文件安装
将下载的文件解压缩到 Web 访问的文件夹中,修改 config/web.php 文件,给 cookieValidationKey 配置项 添加一个密钥(若你通过 Composer 安装,则此步骤会自动完成):
// !!! 在下面插入一段密钥(若为空) - 以供 cookie validation 的需要
'cookieValidationKey' => '在此处输入你的密钥',
文件目录
Basic
├─assets/ * 资源包 *
│
├─commands/ * 控制台应用程序 *
│
├─config/ * 应用配置及其他配置 *
│ console.php
│ db.php * 数据库配置 *
│ params.php * 自定义配置项 *
│ test.php
│ test_db.php
│ web.php * 系统配置项 *
│
├─controllers/ * 控制器文件 *
│
├─mail/ * 发送邮件的相关文件配置 *
│
├─models/ * 模型文件存放位置 *
│
├─runtime/ * 运行时文件,日志和缓存等 *
│
├─tests/ * 测试文件*
│
├─vagran
│
├─vendor/ * 包含已经安装的 Composer 包,包括 Yii 框架自身 *
│
├─views/ * 包含视图文件 *
│ └─layouts/ * 网站模板 *
│
├─web/ Web * 应用根目录,包含 Web 入口文件 *
│ │ favicon.ico
│ │ index-test.php
│ │ index.php *应用入口文件 *
│ │ robots.txt
│ │
│ ├─assets/ * 包含 Yii 发布的资源文件(javascript 和 css) *
│ │
│ └─css
│
├─widgets/ * 公用小部件 *
│
│ .bowerrc
│ .gitignore
│ codeception.yml
│ composer.json * Composer配置文件,描述包信息 *
│ composer.lock
│ docker-compose.yml
│ LICENSE.md
│ README.md
│ requirements.php
│ Vagrantfile
│ yii
└──yii.bat
配置信息
配置项绝大部分在config文件夹中,有一些配置项在assets、web下
- 数据库配置文件
config/db.php:<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=wifi', * 地址localhost,数据库名wifi* 'username' => 'hl', * 用户名 * 'password' => 'hl123', * 密码 * 'charset' => 'utf8', ]; - 系统配置文件
config/web.php:
调用方法:<?php ··· $config = [ ··· 'language'=>'zh-CN', * 语言 * 'timeZone'=>'Asia/Shanghai', * 时区 * 'name' => '移动终端特征采集系统', * web名称(也可定义在`config/params.php`) * 'defaultRoute' => 'site/index', * 默认路由 * 'layout' => 'sys-man', * 模板 * 'components' => [ * jquery在head就引用 * 'assetManager' => [ 'bundles' => [ 'yii\web\JqueryAsset' => [ 'jsOptions' => [ 'position' => \yii\web\View::POS_HEAD, ] ], ], ], * 设置cookie存储路径,不设置该项会导致同一个浏览器无法同时打开两个yii2项目 * 'request' => [ //'csrfParam'=>'wifi_csrf', 'csrfCookie' => [ 'path' => '' ] ], * 设置session存储路径 * 'session'=>[ 'cookieParams' => [ 'path' => '' ] ], ··· ], ]; * debug模块功能(开发模式才有用) * if (YII_ENV_DEV) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = [ 'class' => 'yii\debug\Module', //去掉下行注释开启功能,如果不是本地访问还需要添加本机IP //'allowedIPs' => ['127.0.0.1', '::1'], ]; * gii模块功能(开发模式才有用) * $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = [ 'class' => 'yii\gii\Module', //去掉下行注释开启功能,如果不是本地访问还需要添加本机IP //'allowedIPs' => ['127.0.0.1', '::1'], ]; } return $config;Yii::$app->name - 自定义配置项
config/params.php:
调用方法:<?php return [ 'adminEmail' => 'admin@example.com', 'webName'=>'basic' ];Yii::$app->params['webName'] - 全局资源配置项
assets/AppAsset.php:<?php ··· class AppAsset extends AssetBundle { public $basePath = '@webroot'; public $baseUrl = '@web'; * 公共css * public $css = [ 'css/site.css', ]; * 公共js * public $js = [ 'js/site.js', ]; * 公共依赖 * public $depends = [ 'yii\web\YiiAsset', 'yii\bootstrap\BootstrapAsset', ]; } - 入口文件
web/index.php:
为了便于切换使用环境,Yii 提供了一个定义在入口脚本中的 YII_ENV 常量
开发模式下发生错误会输出很多错误日志,生产模式会简化错误信息并减少日志且gii、debug不可用<?php ··· defined('YII_ENV') or define('YII_ENV', 'dev'); * 开发模式 * defined('YII_ENV') or define('YII_ENV', 'prod'); * 生产模式 * defined('YII_ENV') or define('YII_ENV', 'test'); * 测试模式 * ···
页面渲染
Yii2是一个MVC模式框架,下面介绍完整渲染页面过程
- M即Model,文件放在
models文件夹中。<?php namespace app\models; use yii\base\Model; class HellowWorld extends Model { public function GetMessage(){ return 'hellow world'; } } - V即View,文件放在
views文件夹中并且根据控制器建立子目录。<?php echo $message; - C即Controller,文件放在
controllers文件夹中。
浏览器输入<?php namespace app\controllers; use yii\web\Controller; use app\models\HellowWorld; class HellowWorldController extends Controller { * actionIndex中action表示可以通过浏览器或者js的ajax交互获取数据,动作名采用驼峰式名命 * public function actionIndex(){ $message=HellowWorld::GetMessage(); * 这里的index会渲染views/hellow-world/index.php * return $this->render('index',[ 'message'=>$message, ]); } }127.0.0.1/basic/web/index.php?r=hellow-world即可看到输出hellow world。
浏览器接收到?r=hellow-world/index,会到HellowWorldController.php中然后执行actionIndex()函数,最后把结果根据$this->render()函数指定的视图文件显示到浏览器 - 如果有css、js、图片等资源需要引用,可以放在
web相关文件夹下:
假设要引用web/js/app.js和web/css/app.css,web不需要写或者写成@web/js/app/js<img src="img/app.png" alt=""> <?php $this->registerJsFile('js/app.js'); $this->registerCssFile('css/app.css'); ?>
Gii自动生成
Gii是Yii框架自带的快速构建页面的脚手架
要使用Gii首先要配置
config/web.php:$config['modules']['gii'] = [ 'class' => 'yii\gii\Module', 'allowedIPs' => ['127.0.0.1', '::1'], * 把前面的注释去掉并添加允许使用Gii的 * ];浏览器打开
http://127.0.0.1/basic/web/index.php?r=gii即可看到:
点击
Model Generator的Start按钮即图中红色区域:
完成后会发现
models下多了一个文件DeviceInfo.php。点击
CRUD Generator按钮即图中黄色区域:
完成后会发现:
models/search下多了DeviceInfoSearch.php,
controllers下多了DeviceInfoController.php,
views下多了device-info文件夹,
浏览器输入http://127.0.0.1/basic/web/index.php?r=device-info即可查看。
JS从Controller获取数据
如果使用get请求数据请跳过本节,Yii采用CsrfToken验证POST有效性,给出三种方法
- 下面是一个JS的Ajax实列:
$.ajax({ url:"?r=device-info/get-data", type:'post', timeout:60000, data:{ //如果没有两者之一,会返回400 (Bad Request) _csrf:yii.getCsrfToken(), //_csrf:$('meta[name="csrf-token"]').attr('content'), }, success:function(m){ console.log(m); }, error:function(e){ console.log(e.responseText); } }) - 如果在表单中:
如果使用Yii的<input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>">ActiveForm表单会自动添加 - controller函数中禁用认证:
··· class HellowWorldController extends Controller { public $enableCsrfValidation = false; * 关闭该控制器的所有方法的Csrf验证 * }
版权声明:本文为maolidi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。