yii sum

11 篇文章 0 订阅

------------------------------------------------------------------yii2.0------------------------------------------------------------------------

1.php新特性

  • 匿名函数

  • 数组短语法形式: [1,2,3] 取代 array(1,2,3) 。这在多维数组、嵌套数组中,代码更清晰、

    简短。

  • 在视图文件中使用PHP的 <?= 标签,取代 echo 语句。

  • 标准PHP库(SPL) 类和接口,具体可以查看 SPL Class and Interface

  • 延迟静态绑定, 具体可以查看 Late Static Bindings

  • PHP

  • (Traits)

  • 使用PHP intl 扩展实现国际化支持, 具体可以查看 PECL init

    了解Yii2.0使用了PHP的新特性,可以避免开发时由于环境不当,特别是开发生产环境切换时,产 生莫名其妙的错误。 同时,也是让读者朋友借机学习PHP新知识的意思。

 

 

 

 

2.属性+事件+行为

 

component  区分成 object ( set get ) <== compent( event + behavior  )

 

Yii1.1是 , 就 已 经 有 了component了 。Yii2将Yii1中 的CComponent拆 分 成 两 个 类 : yii\base\Object 和 yii\base\Component 。Object比较轻量级些,通过getter和setter定义了 类 的 属 性 (property) 。Component派 生 自Object, 并 支 持 事 件 (event) 和 行 为 (behavior) 。 因 此,Component类具有三个重要的特性:

• 属性(property) • 事件(event)
• 行为(behavior)

 

相信你或多或少了解过,这三个特性是丰富和拓展类功能、改变类行为的重要切入点。

 

 

 

 

3.别名

小结一下,默认预定义别名一共有10个,其中路径别名9个,URL别名只有 @web 1个: • @yii 表示Yii框架所在的目录;
• @app 表示正在运行的应用的根目录;
• @vendor 表示第三方库所有目录;

• @runtime 表示正在运行的应用的运行时用于存放运行时文件的目录; • @webroot 表示正在运行的应用的入口文件 index.php 所在的目录; • @web URL别名,表示当前应用的根URL;
• @common 表示通用文件夹;

• @frontend 表示前台应用所在的文件夹;
• @backend 表示后台应用所在的文件夹;
• @console 表示命令行应用所在的文件夹;
• 其他使用Composer安装的Yii扩展注册的二级别名。

 

  • 别名需在使用前定义,因此通常来讲,定义别名应当在放在应用的初始化阶段。

  • 别名必然以 @ 打头。

  • 别名的定义可以使用之前已经定义过的别名。

  • 别名在储存时,至多只分成两级,第一级的键是根别名。 第二级别名的键是完整的别名,而不是 去除根别名后剩下的所谓的“二级”别名。

  • Yii通过分层的树结构来保存别名最主要是为高效检索作准备。

  • 很多地方可以直接使用别名,而不用调用 Yii::getAlias() 转换成真实的路径或URL。

  • 别名解析时,优先匹配较长的别名。

  • Yii预定义了许多常用的别名供编程时使用。

  • 使用别名时,要将别名放在最前面,不能放在中间。

 

 

 

4.自动加载机制

require==>new

_autoload==>new

spl_autoload_register==>new (允许自定义 自动加载 函数或是类)

 

检查 $classMap[$className] 看看是否在映射表中已经有拟加载类的位置信息;

 

如果有,再看看这个位置信息是不是一个路径别名,即是不是以 @ 打头, 是的话,将路径别名解 析成实际路径。 如果映射表中的位置信息并非一个路径别名,那么将这个路径作为类文件的所在 位置。 类文件的完整路径保存在 $classFile ;

 

如果 $classMap[$className] 没有该类的信息, 那么,看看这个类名中是否含有 \ , 如果 没有,说明这是一个不符合规范要求的类名,autoloader直接返回。 PHP会尝试使用其他已经注册 的autoloader进行加载。 如果有 \ ,认为这个类名符合规范,将其转换成路径形式。 即所有的 \ 用 / 替换,并加上 .php 的后缀。

 

将替换后的类名,加上 @ 前缀,作为一个路径别名,进行解析。 从别名的解析过程我们知道,如 果根别名不存在,将会抛出异常。 所以,类的命名,必须以有效的根别名打头:

 

MVC

DIP(依赖倒置 设计原则)==>IoC(控制反转 设计思路)==>DI(依赖注入 设计模式)==>构造函数或是属性注入

 

5.配置文件

Yii应用配置文件生效的顺序是:

• 前台、后台、命令行互不影响;

• 前台、后台、命令行覆盖common;

• aliases和main互不影响;

• params是main的一部份;

• 带local的覆盖不带local的。

 

 

 

-------------------------------------------------------------------------------------------yii1.1----------------------------------------------------------------------------------------

小结:

 

controllers:filters  accessRules  常见调用 behavior

models:ar rules relations search curd  +labels

views:导航 日期 列表页  菜单层级 动态效果(按钮 弹窗 进度条 拖拽 选中) | 表单 上传 验证码 分页  ajax  防xss|编辑器 语言包  格式化

extensions:ajax 多图 多上传 编辑器 mail right debug  css/js压缩 editor srbac

configs:入口信息(path + import)设置信息(components(作为widget加载,可有自带的view)+modules) 其他信息  (time charset language) 

+url 逻辑 配置 参数

.htaccess 防盗链 规范网址 错误页面 加密 验证 缓存 伪静态  压缩 

yiiblog的东西

 

 

 

教程:

http://blog.csdn.net/dreamzml/article/category/1285252

 

http://blog.csdn.net/mapdigit/article/category/1198915

 

http://www.thinksaas.cn/group/show/283/

 

小结:

http://www.cnblogs.com/thinksasa/p/3780549.html

http://blog.csdn.net/iefcu/article/details/6021443

 

 

获取(见具体实现):类/方法 方式 参数 文件(多国语言 主题替换 加载样式) | url | curd(多表 & 查询) | widget(控件 日历 验证码  上传文件 & 特效)

默认控制和方法并获取ID 

判断提交参数  

获取提交方式

导入js css meta

调用生成url

mysql curd

创建 widget CWidget::init()与CWidget::run()的区别

命名空间常量 system=>framework  zii=>library  application==>应用  webroot==>入口目录 ext==>第三方扩展

 

具体实现:

控件  ActionFormDemo CListview  CDetailView CGridView

日历  DatePickerDemo

验证码  CCaptchaDemo

 

多文件上传 MultiFileUploadDemo  

加载缓存 memcache/redis

使用事务 transaction

多表&查询组件  视图嵌套   DetailViewDemo

验证规则 :自定义的规则

criteria查找:条件查找

Ajax 验证

 

多国语言   I18ndemo

加载样式 registerCss  registerJavascript

主题替换 ThemeDemo 



UI组件,特效的查文件名  :

--CJuiAccordion 手风琴  

--CJuiAutoComplete 自动填充完成

--JuiButtonDemo  按钮属性

--CJuiDialog 弹窗

--JuiDraggable   CJuiDroppable 拖拽

--CJuiProgressBar 进度条

--CJuiResizable 框框缩放

--CJuiSelectable select事件

--JuiSlider  图片缩放

--CJuiSliderInput输出对应的值

--CJuiSortable 拖拽排序

--CTreeView 树形图

--CTextHighlighter 显示代码示例

--CMenu+ breadcrumbs 菜单栏

--CMaskedTextField 格式输入框

--TabViewDemo 标签分页

+JuiTabsDemo

 

 

 

详细:

controllers:filters  accessRules  常用调用 behavior

 

filter:framework/web/filters/CFilter.php

  1. public function filters()  
  2. {  
  3.     //过滤只用于actionEdit和actionCreate方法  
  4.     return array(  
  5. 'accessControl',   
  6.   'postOnly + delete', 
  7.         'test + edit, create,  //自定义方法
  8.     );  
  9.   
  10. }  
  11. //定义的过滤方法  Filters+Test,也就是上面的
  12. public function FilterTest($filterChain)  
  13. {  
  14.     //判断什么的  
  15.     //过滤完后继续执行代码  
  16.     $filterChain->run();  
  17. }  

 

 

 

accessRules:framework/yiilite.php   ccontroller—>controller—>自定义+Controller

  1. public function accessRules()  
  2. {  
  3.     return array(  
  4.         array('allow',  // 所有用户有操作权限:index,view  
  5.             'actions'=>array('index','view'),  
  6.             'users'=>array('*'),  
  7.         ),  
  8.         array('allow', // 仅登录用户有权限操作:create,update  
  9.             'actions'=>array('create','update'),  
  10.             'users'=>array('@'),  
  11.         ),  
  12.         array('allow', // 指定用户有权限操作:admin,delete  
  13.             'actions'=>array('admin','delete'),  
  14.             'users'=>array('admin'),  
  15.                 'expression'=>array($this,'isNormalAdmin'),    //表示调用$this(即**Controller)中的isNormalAdmin方法。
  16.         ),  
  17.         array('deny',  // 禁止所有用户操作  
  18.             'users'=>array('*'),  
  19.         ),  
  20.     );  
  21. }  

其他选项:http://www.cnblogs.com/freespider/p/3490233.html

 

 

常见调用: path/controller/action/val    http:ip cookies session http://blog.csdn.net/xinqingch/article/details/9045641

request—>cookie  getParam userHostAddress urlReferrer url  hostInfo

homeUrlreturnUrl  BasePath  baseUrl attributes

getController()->getAction()->id; 

Yii::app()->request->isPostRequest;  

db—>getLastInsertID

url调用:http://blog.csdn.net/dreamzml/article/details/8479047

 

behavior: framework/base/CBehavior.php

 

event—>事件onclick  event handler—>回调callback

  1. <?php  
  2. class eventClass extends CBehavior  
  3. {  
  4.     public function show(){  
  5.         echo "show";  
  6.     }  
  7. }  
  8.   
  9. class test extends CComponents  
  10. {  
  11.     public function hello(){  
  12.         $this->attachBehavior(‘onclick',"eventClass");  
  13.         $this->show();  
  14.     }  
  15. 源码分析:http://blog.chinaunix.net/uid-27003384-id-3338673.html
  16. http://blog.csdn.net/chengfei112233/article/details/7659768

 

 

 

 

models:ar rules relations search curd  +labels

 

ar:framework/db/ar/CActiveRecord.php

before/after  + Validate  Save Delete Construct  Find:

 

rules: framework/validators

require:unique compare length in type default exist   safe unsafe

match : email url numerical catcher  file  date boolean

 

 

 

relations:framework/db/ar/CActiveRecord.php

  • BELONGS_TO(属于): 如果表 A 和 B 之间的关系是一对多,则 表 B 属于 表 A (例如 Post 属于 User);

  'category'=>array(self::BELONGS_TO‘其他表‘本类的字段')

解释:其他表.PK=本表.字段

 'image' => array(self::HAS_MANY, ‘其他表', ‘其他表的字段'),

解释:其他表的字段 关联本类的主键

'categories'=>array(self::MANY_MANY, 'Category', 'prop_category(prop_id, category_id)’) 解释:中间表名( 本表外键, many表外键 ) 

'user'=>array(self::HAS_ONE,其他表','字段'),

解释:本表主键 = 其他表的字段

 

  • HAS_MANY(有多个): 如果表 A 和 B 之间的关系是一对多,则 A 有多个 B (例如 User 有多个 Post);
  • HAS_ONE(有一个): 这是 HAS_MANY 的一个特例,A 最多有一个 B (例如 User 最多有一个 Profile);
  • MANY_MANY(多对多) 这个对应于数据库中的 多对多 关系。由于多数 DBMS 不直接支持 多对多 关系,因此需要有一个关联表将 多对多 关系分割为 一对多 关系。在 AR 术语中,我们可以解释 MANY_MANY 为 BELONGS_TO 和 HAS_MANY 的组合。

 

 

如果是一对一:A->VarName

如果是一对多:A->VarName->name

如果是多对多

 

  1. $users = As->VarName  
  2. foreach($users as $u){  
  3.    $_tmp_users[] = $u -> getName;  
  4. }  
  5. userStr = implode(', ', $_tmp_users);   

 

 

http://hudeyong926.iteye.com/blog/1274077

 

 

search:/framework/db/schema/CDbCriteria.php

compare  select add(In/NotIn)Condition   addSearchCondition  addBetweenCondition join order group  having limit with prams

 

 

curd:framework/yiilite.php

参数:bindParam

查询:query queryall query row  queryColumn queryScalar execute

数据集合:find findall findbypk   findAllByAttributes findAllBySql

查询个数:count countBySql  exists

添加:save insert

修改:updateAll updateByPk  updateCounters

删除: deleteAll deleteByPk  delete

事务:beginTransaction commit rollback

分页:http://zhengdl126.iteye.com/blog/1460779

 

 

 

views:framework/zii+web+utils  

导航 日期 列表页  菜单层级 动态效果(按钮 弹窗 进度条 拖拽 选中) | 表单 上传 验证码 分页  ajax  防xss |编辑器 语言包  格式化

 

yii自带效果:cbreadcrumbs  CJuiDatePicker CGridView   clistview  kindEditor language  droplist   format

http://blog.csdn.net/mapdigit/article/category/1198915/1

http://jingyan.baidu.com/article/ed15cb1b78871c1be2698141.html

 

ActiveForm 表单

Captcha 验证码

MultiFileUpload 上传文件

DatePicker 日期

 

Menu 标签

Tabs 标签

TreeView 层级菜单

TabView 标签

 

ListView 列表页

DetailView 详情页

GridView 列表页

Accordion 折叠页面

 

 

Selectable 选中

AutoComplete 自动显示

TextHighlighter 高亮代码

Theme 主题

多国语言示例

ClipWidget 预定义(宏)

ContentDecorator 嵌套

 

Button 按钮

Dialog 弹窗

ProgressBar 进度条

Slider 进度条拖放

SliderInput 进度条输入

MaskedTextField 输入框格式

StarRating 星星

+

Draggable 拖放图片

Droppable 拖放图片

Resizable 缩放

Sortable 拖放

 

功能:model (属性和验证) ctrl(方法和权限) view(widgets)

 

验证码: framework/validators/CCaptchaValidator.php

—model 加一个属性和rules

—view 加载widget(‘captcha')

—controller:action 中加验证码调captcha,同时加入到accessRules

—表单开启ajax后 修改testLimit

 

ajax:framework/web/widgets/CActiveForm.php 

—model:rules+function  (CFormModel)

—view:widget(CActiveForm)

—controller:调用model的类判断 $_POST['ajax']===‘form-id'

链接:http://601502546.blog.163.com/blog/static/25961076201312703536673/

 

分页--

path:framework/web/widgets/pagers/CLinkPager.php

ctrl CPagination  view CLinkPager

 

path:framework/zii/widgets/CListView.php

ctrl CActiveDataProvider  view zii.widgets.CListView

 

path:framework/zii/widgets/grid/CGridView.php

modelCActiveDataProvider  view CGridView

链接:http://blog.csdn.net/dreamzml/article/details/8225366

 

xss--framework/web/widgets/CHtmlPurifier.php

CHtmlPurifier==>ctrl + filter  +model + view

 

 

extensions:ajax 多图 多上传 编辑器 mail right debug  css/js压缩 editor srbac

config

Yii::import('application.vendors.*);

controller

require_once('Zend/Search/Lucene.php);

$lucene=newZend_Search_Lucene($pathOfIndex);

$hits=$lucene->find(strtolower($keyword));

链接:http://keshion.iteye.com/blog/1594948

 

 

 

 

configs:入口信息(path + import)设置信息(components+modules) 其他信息  (time charset language) 

 

basePath name aliases defaultController  preload defaultController import(models components modules)   

components(db  params  cache gii session cookie url user errorHandler log )   modules(gii 自定义)

timeZone theme sourceLanguage charset language theme

http://hudeyong926.iteye.com/blog/1484367

 

 

+url 逻辑 配置 参数

逻辑:解析(解析 - 正则 - path+get)+创建(解析 path+get  正则 ) http://www.cnblogs.com/mrcoke/articles/2407759.html

参数:格式 后缀 规则(正则) 隐藏index.php http://kenzou04jolin.blog.163.com/blog/static/8655006520130152475659/

配置:config+nginxRewrite+(apache==>.htaccess)

 

+.htaccess

http://jingyan.baidu.com/article/e8cdb32b8feba237052bada6.html

http://3y.uu456.com/bp-sd48b120bd64783e0q122bf6-1.htm

 

 

+yiiBlog

1.controller  route:

postcontroller.index->view->_view->Post.model->返回controller

postcontroller.create->create.view->_form->返回controller

update同上

postcontroller.admin->postmodel.search->admin.view-->p.ctrl.up/del/view-->返回controller

postcontroller.view-->_view _comments  \comment\_form-->返回controller

 

Ajax:CActiveForm  CAutoComplete
+controller.ajax    

route: comment._comment-->postContorller.view-->addComment

//view

/*CActiveForm挂件里面的一个极为有用的特性是它支持数据验证

支持三个层面的数据验证

服务器端验证,基于AJAX的验证,客户端验证 

*/

<?php $form=$this->beginWidget('CActiveForm', array(

'id'=>'comment-form',

 

  'enableAjaxValidation' = >true, //ajax验证
  'enableClientValidation' = >true,//客户端js验证

)); ?>

<?php $this->endWidget(); ?>

 

 

cotroller

if(isset($_POST['ajax']) && $_POST['ajax']==='comment-form')

{

echo CActiveForm::validate($comment);

Yii::app()->end();

}

 

 

 

+view.CAutoComplete

route:post.view-->post.controller

//post.view

<?php echo $form->labelEx($model,'tags'); ?>

<?php $this->widget('CAutoComplete', array(

'model'=>$model,                            //post的model对象

'attribute'=>'tags',                           //对应的属性值

'url'=>array('suggestTags'),             //controller的方法

'multiple'=>true,                            //允许输入多个,默认都好隔开

'htmlOptions'=>array('size'=>50),  //输入框

)); ?>

 

//postcontroller  $_GET[q]是输入的值

public function actionSuggestTags()

{

if(isset($_GET['q']) && ($keyword=trim($_GET['q']))!=='')

{

$tags=Tag::model()->suggestTags($keyword);

if($tags!==array())

echo implode("\n",$tags);

}

}

 

 

 

2.数据控件:

CDbCriteria==>compare or condition  ==>CActiveDataProvider==>render  

 

 

3.view控件

列表页

CListView==>dataProvider itemView  template 

http://blog.csdn.net/mapdigit/article/details/8452128

 

列表页

CgridView==>dataProvider filter 

columns(array(

'name'=>字段名称

'type'=>链接的raw 

 'filter'=>下拉菜单的生成

 'value'==>model层查询),

...

array('class'=>'CButtonColumn'),)

http://www.imobilebbs.com/wordpress/archives/4079?variant=zh-cn

 

详情页

CDetailView==>(dataProvider,attributes)

http://blog.csdn.net/mapdigit/article/details/8452130

l

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值