组件

Component的或其子类的实例。属性和事件

组件的属性。(名称大小写不敏感)

可读可写,就像对象的公共成员变量。

通过$component->属性名。获取属性值。$component->属性名 = 值 。设置属性值。

组件事件(名称大小写不敏感)

特殊的属性。使用事件句柄 event handlers的方法作为值。

组件事件以on开头的命名方式定义。

组件行为

组件可以绑定多个行为。行为是一个对象,其方法可以通过收集功能的方式来实现集成,多重继承。

行为类必须实现IBehavior接口。行为必须要绑定到一个组件,通过attach()绑定。然后通过组件可以调用此方法。

模块

模块是一个独立的软件单元。包含模型,视图,控制器和其他组件,相当于一个小型的应用,位于一个应用里。

大型应用里,我们把它分为几个模块。每个模块单独维护和部署。开发模块,可以在以后的项目里复用。

模块目录

模块名xxx文件夹 即ID/

模块类文件xxxModule.php

可复用的用户组件components/

  小物件的视图view/

控制器文件contrllers/

第三方扩展extension/

模块类文件models/

视图和布局文件views/

  index.php首页视图

具体开发过程中目录是按实际需求设置的。不一定是这样。

模块类文件继承自CWebModule,必须要有这个继承。

模块目录放在基础目录的modules下。配置时也可以带初始属性值...

访问路由我们在之前都已写过了,就是模块ID/控制器ID/动作ID,如果控制器在子目录中也可以多写一个文件夹路径。

模块的嵌套

理应上来说模块可以无限嵌套。 父模块、子模块,子模块必须定义在父模块的modules属性里,就像在应用配置中设定模块一样。路由:parentModuleID/childModuleID/controllerID/actionID。

上次看到模块这,一晃就过去半个月时间,一头扎进项目中,期间感觉少些东西不了解,继续把手册干完。

路径别名与名字空间

恩。听起来就觉得是命名空间

手册说类似于namespace

用点号语法,RootAlias.path.to.target 。RootAlias是某个目录的别名,通过YiiBase::getPathOfAlias()翻译别名为相应的带杠杠的文件夹路径。

通过YiiBase::setPathOfAlias()可以定义新的根路径别名

预定义:

system:表示Yii框架目录  yii/framework

zii:表示Zii库目录

application:表示应用的基础目录  

webroot:表示入口脚本文件所在的目录 (入口脚本:一般是指写有defined DEBUG,require_once框架引导文件那些的index.php)

ext:表示包含第三方扩展的目录

这么说它跟命名空间还是不一样的,可以很方便的导入类Yii::import('system.web.CController');

import方法比include和require更加高效,import导入不会被真正包含,到第一次被引用才会加载。

我也不懂优化,这些能带来多少性能方面的改善

原生php好像没有import这个函数 有的只见了include和require、include_once和require_once,php有好多我们可能并不知道能用的函数可以使用的哦。

Class Map 预先导入,预先导入的类可以在应用的任何地方使用,无需导入或者包含文件。系统内置的类就是使用这样的方法。在CWebApplication::run()执行之前写入Yii::$classMap = array(){ 类名 => 文件路径 }定义。

还可以导入目录,用Yii::import('目录名’); 这样目录下的所有类文件在使用时都会被包含。

YII在命名空间引用上可以说是很灵活了。以后再搞明白点。

开发规范

不知道为什么Yii手册开发规范要放到这么后面说

遵循规范可以避免写太多配置。

url规范

默认情况:index.php?r=ControllerID/ActionID

r 为路由,被Yii解析为控制器和动作。

通过CUrlManager创建更加SEO友好的地址。

代码规范

变量、函数、类使用驼峰,首字母大写,变量和函数名第一个单词小写以区分于类

私有类成员以下划线作为名字的开头

在php不支持命名空间时(5.3.0以前版本),避免类名冲突,所有的Yii框架类名以C为前缀

控制器必须以Controller结尾

配置规范

配置使用键值对数组

键代表属性名。值对应初始值

文件

类文件应以它们包含的公有类命名。视图文件应以视图的名字命名。配置文件可以任意命名。

这在开发过程中好像并没有很好的遵守

目录

WebRoot/protected: 这是应用基础目录,是放置所有安全敏感的PHP脚本和数据文件的地方。

WebRoot/protected/runtime:临时文件

WebRoot/protected/extensions:第三方扩展

WebRoot/protected/modules:应用模块,每个模块一个子目录

WebRoot/protected/controllers:所有控制器文件

WebRoot/protected/views:所有控制器文件

WebRoot/protected/views/layouts:布局文件

WebRoot/protected/views/system:系统视图,用于显示异常和错误的模板

WebRoot/assets:公共资源文件

WebRoot/themes:应用主题

数据库

数据库表名和列名都用小写字母,用下划线分隔单词,表名推荐使用单数。

可以使用前缀。

学习Yii(3)的更多相关文章

  1. 如何学习YII

    我是在Yii的官方wiki上看到这篇文章的.读的第一遍觉得很不错,还有一种想翻译出来的冲动.虽然,本人英文很烂,但是毕竟写了这样多年的代码,估计大概的意思是能有的吧.英文原文:http://www.y ...

  2. 开始学习Yii

    YII是我一直想学的一个框架,之前看过TP3.2和5.0.Yii是Yes it is 的缩写. 我采用下载源码的方式安装,解压到web目录.以前用过Composer,Yii官网也推荐用Composer ...

  3. 学习Yii(2)

    Yii拥有很好的手册,还是中文的,官方的手册很详细.还是应该好好看一下.今天就开始跟着项目代码调试. 上次看到入口脚本,学习一定要快,要用心,抓住时间.不然时间拖久了就忘了.延续不上,大打折扣.而且要 ...

  4. Yii框架的学习指南(策码秀才篇)1-2 一步步学习yii framework

    我也是新手,不过之前学习了tp和ci框架,所以尝鲜想看看yii到底有多强大. 如何新建一个webapp(网站应用)呢,下面是2个步骤: 1. cmd 切换到htdocs下面的yii目录下的framew ...

  5. Yii2的深入学习--yii\base\Event 类

    根据之前一篇文章,我们知道 Yii2 的事件分两类,一是类级别的事件,二是实例级别的事件.类级别的事件是基于 yii\base\Event 实现,实例级别的事件是基于 yii\base\Compone ...

  6. Yii2的深入学习--yii\base\Object 类

    之前我们说过 Yii2 中大多数类都继承自 yii\base\Object,今天就让我们来看一下这个类. Object 是一个基础类,实现了属性的功能,其基本内容如下: <?php namesp ...

  7. 学习Yii框架,有哪些比较好的网站

    1.http://www.yiiframework.com/ 2.http://www.kancloud.cn/curder/yii/247741 3.http://www.manks.top/yii ...

  8. <yii 框架学习> yii 框架改为中文提示

    工作需要用到yii框架,但发现yii框架自带的提示都是英文的.上网找资料才发现其实可以自己陪置 . 将项目protected/config/main.php里的app配置加上language=> ...

  9. 回顾yii的学习进程 总结了一下的发展过程

    如果看到这篇文章,我想说恭喜你 不用,你可以先放下学习yii了  我先学在把结论发给你们节省精力 yii2的学习教程:http://www.digpage.com/recent_update.html ...

随机推荐

  1. LINQ to DataSet,对离线数据的Linq支持、AsEnumeable()

    一.DataTable的扩展方法: 1.DataTable转Linq:AsEnumerable 方法 返回IEnumerable<T>对象,其中泛型参数T是DataRow. 此对象可用在 ...

  2. java实现文件夹上传

    文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件.而且支持断点续传. 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场 ...

  3. DE2-115 以太网通信之一88E1111网卡接收PC数据

    想利用手头上的DE2-115 写一个关于以太网通信的驱动,经过了这么多天的实验调试终于有了一些认识. 1.我在观察网卡发送数据与接收数据的过程中发现,我从fpga上的一个网卡发送数据,然后另一个网卡接 ...

  4. 在Android中使用OpenGL ES进行开发第(二)节:定义图形

    一.前期基础知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGLES绘制2D ...

  5. 学密码学一定得学程序(SDUT 2463)

    Problem Description 曾经,ZYJ同学非常喜欢密码学.有一天,他发现了一个很长很长的字符串S1.他很好奇那代表着什么,于是神奇的WL给了他另一个字符串S2.但是很不幸的是,WL忘记跟 ...

  6. P1968 美元汇率 怀疑智商超过海平面

    https://www.luogu.org/problemnew/show/P1968 也是一道贪心题,一些计算: 然而我却弄得很复杂: 既然我们要的是最后的最大值,那我们为什么要注意中间的细节呢: ...

  7. 1656:Combination

    一本通1656:Combination 1656:Combination 时间限制: 1000 ms         内存限制: 524288 KB提交数: 89     通过数: 49 [题目描述] ...

  8. 文件对比工具 Beyond Compare 4.2.9中文破解版for win 附通用注册码

    链接: https://pan.baidu.com/s/1yYxPo8nNv0PuOA1ZC9-F1w 提取码: v76g 注册码: --- BEGIN LICENSE KEY --- H1bJTd2 ...

  9. MONGODB 数据库回复备份

    1.导出工具:mongoexport     1.概念:         mongoDB中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件.可以通过参数指 ...

  10. springboot的jar在linux运行

    springboot项目使用maven打包成jar包,如何在linux优雅部署?平时启动项目使用java -jar命令,关闭程序需要查询pid再查杀进程,这样都太麻烦了,今天发现一个博客已经写好的脚本 ...