Yii是一个基于组件的高性能PHP框架,用于快速开发Web应用程序(下面内容基于Yii 1.1)php
index.php
发起请求config.php
并建立一个应用主体Request
解析请求的路由Response
index.php
<?php /// 定义全局变量,在生产环境中请删除此行 defined('YII_DEBUG') or define('YII_DEBUG',true); // 包含Yii引导文件 require_once('path/to/yii/framework/yii.php'); // 读取配置文件 $configFile='path/to/config/file.php'; // 建立一个应用实例并执行 Yii::createWebApplication($configFile)->run(); ?>
config.php
应用主体的相关配置,能够内部属性能够经过Yii::app()->attributeName
访问mysql
<?php $config = [ 'id' => 'basic', //应用主体ID 'basePath' => dirname(__DIR__), //应用的根路径 'language' => 'zh-CN', //网页语言 'defaultRoute' => 'post/index', //默认路由 'components' => [ //注册组件 'db'=>array( 'class' => 'system.db.CDbConnection', 'connectionString' => 'mysql:host=mysql56.rdsm1whs0okm6y4.rds.bj.baidubce.com;dbname=crowd_test', 'emulatePrepare' => true, 'username' => 'crowdtest', 'password' => 'unittest_sdcqa', 'charset' => 'utf8', ), 'fixture' => array( 'class' => 'crowdtest.tests.test.CDbFixtureManager', 'basePath' => dirname(__FILE__) . '/../fixtures/', ), ] ]; return $config; ?>
Model
模型是MVC架构中的M,由CModel或其子类(如CActiveRecord、CFormModel)继承而来,是表现业务数据、规则和逻辑的对象,表单模型(CFormModel)用于保持从用户的输入获取的数据, 这些数据常常被获取,使用,而后丢弃。Active Record (AR) 是一种用于经过面向对象的风格抽象化数据库访问的设计模式。sql
<?php class ContactForm extends CFormModel { //【业务数据】 public $name; public $email; public $verifyCode; //【业务规则】 // array('AttributeList', 'Validator', 'on'=>'ScenarioList', ...附加选项) // Validator: required,email,length,captcha,url,boolean等等 public function rules(){ return array( array('name,email','required'), array('email','email'), array('name', 'length', 'min'=>3, 'max'=>12), array('verifyCode','captcha'), ); ]; } //属性在页面中的显示内容 public function attributeLabels() { return array( 'name' => '姓名' ); } //【业务逻辑】 public function contact($email){ } } ?>
数据访问对象(DAO) 对访问存储在不一样数据库管理系统(DBMS)中的数据提供了一个通用的API。数据库
$connection=Yii::app()->db;//CDbConection实例,表明一个数据库链接 $command=$connection->createCommand($sql) //CDbCommand实例,表明Sql指令 $command->bindValue(); //绑定变量 $command->query(); //执行查询 $command->queryRow(); //执行查询并返回结果中的第一行 $command->execute(); //执行操做,删除、新增等
Active Record(AR)是一个流行的对象-关系映射(ORM)技术,经过面向对象的方式来操纵数据库,大大提升了代码的可维护性,每一个 AR类表明一个数据表,数据表的列在 AR 类中体现为类的属性,一个 AR 实例则表示表中的一行。设计模式
<?php class User extends CActiveRecord { //Required,返回一个此类可调用的实例 public static function model($className=__CLASS__) { return parent::model($className); } //设置数据库中对应的数据表 public function tableName() { return 'tbl_post'; } //不一样表之间的关联关系 //BELONGS_TO 属于 1:n //HAS_MANY 有多个 m:1 //HAS_ONE 有一个 1:1 //MANY_MANY 多对多 m:n public function relations(){ return array( 'article'=>array(self::HAS_MANY, 'Article', 'user_id'), ); } public function myfunc(){ //CURD } } ?>
增长(Create)api
<?php $model = new User(); $model->name = "Lee"; $model->age = "18"; //save中会自动执行rules中的规则检查,根据检查结果返回true或者false if($model->save()){ #code } ?>
查询(research)浏览器
<?php // 查找知足指定条件的结果中的第一行 $user=User::model()->find($condition,$params); $user = User::model()->find("name=:name",array(':name'=>$name)); // 查找具备指定主键值的那一行 $user=User::model()->findByPk($userID,$condition,$params); // 查找具备指定属性值的行 $user=User::model()->findByAttributes($attributes,$condition,$params); // 经过指定的 SQL 语句查找结果中的第一行 $user=User::model()->findBySql($sql,$params); //经过构建CDbCriteria实例完成更复杂的操做 $criteria=new CDbCriteria; $criteria->select='email'; // 只选择 'email' 列 $criteria->condition='user_id=:user_id'; $criteria->params=array(':user_id'=>$id); $user=User::model()->find($criteria); // $params 不须要了 ?>
<?php $user=User::model()->findByPk(3); $user->username='newName'; $user->save(); // 将更改保存到数据库 ?>
<?php $user=User::model()->findByPk(10); // 假设有一个用户,其 ID 为 10 $user->delete(); // 从数据表中删除此行 User::model()->deleteAll("type='test'"); ?>
<?php //懒加载,使用该属性再取回 $user=User::model()->findByPk(1); $user->article; //渴求加载,一次性取回 $user=User::model()->with('article')->findAll(); ?>
Controller
控制器是MVC中的C,由CController继承而来,负责处理请求以及生成响应,一个控制器的声明周期以下:session
st=>start: 建立Controller实例 e=>end: 结束 op0=>operation: 执行CController:init()方法 op1=>operation: 肯定操做ID建立操做(默认操做/独立操做/内联操做/异常) op2=>operation: 依次调用应用主体、模块、控制器的beforeAction()方法 op3=>operation: 控制器执行操做(请求数据解析和填入到操做参数) op4=>operation: 依次调用应用主体、模块、控制器的afterAction()方法 op5=>operation: 应用主体获取操做结果并赋值给响应 st->op0->op1->op2->op3->op4->op5->e
一个简单的控制器文件以下所示,主要由执行过滤和一系列动做组成。架构
<?php Class SiteController extend CController{ //执行过滤 public function filters(){...} //指定一些通用的action public function actions(){...} public function actionIndex(){...} public function actionLogin(){...} public function actionContact() { //设置对应layout布局,不须要时将该值设为false,默认view/layouts/main.php $this->layout = 'newLayout'; //构建模型实例 $model = new ContactForm(); //根据POST的内容渲染视图 if ($model->load(Yii::app()->request->post()) && $model->contact(Yii::app()->params['adminEmail'])) { Yii::$app->session->setFlash('contactFormSubmitted'); return $this->refresh(); } return $this->render('contact', [ 'model' => $model, ]); } } ?>
View
视图是MVC架构中的V,用于展现从数据到终端用户的代码app
视图方面推荐Smarty3,比原生View要简洁高效不少,相关教程后续加上。
Reference:
http://www.yiiframework.com/doc/guide/1.1/zh_cn/index
http://www.yiichina.com/doc/api/1.1
博文做者:vicfeel
博文出处:http://www.cnblogs.com/vicfeel 本文版权归做者和博客园共有,欢迎转载,但须保留此段声明,并给出原文连接,谢谢合做! 若是阅读了本文章,以为有帮助,您能够为个人博文点击“推荐一下”!