YII框架的使用

YII框架的使用

spit: 吐痰,吐口水, 过去式: spat

spat: 本身也可以作为一个单词, 意思是: “小打小闹”“小的吵闹”“小争吵”


  1. list函数,“列表”, 表示将数组中 对应的 元素值 相应的赋值给 多个变量...

    explode和implode是在数组和字符串之间转换, 转换的分隔符不能为空: 如果delimiter为空, 则

    会产生一个警告: empty delimiter...

  2. 数组排序用sort, 数组倒序用array_reverse


yii 框架是美籍华人薛强开发的完全免费开源的php框架. Qiang

yii 是 yes it is的首字母缩写. yee. 读作 yi: yee, easy extensible, efficient框架, 基于mvc设计模式. 纯oop的

下载地址: http://www.yiiframework.com 中文社区是: http://www.yiichina.com

yii仍然是index.php单入口模式, 其中的view视图层会跟 layout和一些小组件widget如treeview等交互.

而Controller控制器,则包括 Filter>atction等层次...

yii的requirements目录是环境检测, 看服务器所在的环境是否满足yii的安装环境...

yii对php 的版本要求还是比较低的: 只要 php version > 5.1.0 就好了, 很多集成环境都能够满足.


安装yii框架

  1. 要使用cmd 命令行方式来安装;
  2. 要进入到www下的yii目录下的 framework目录: cd framework/
  3. 执行命令: php yiic.php webapp your_project_path/project_name //其中yiic.php是一个php脚本, webapp是命令关键字.

    然后在你的项目目录下会生成一个project_name的文件夹, 里面是yii创建的各个目录...

关于项目的路径, 通常是放在跟framework框架相同级别/同级的目录中, 因此, 你在进入framework框架下, 执行php命令的时候, 自然创建的项目路径就是: ../your_project_name

yiic: yii_command, 是yii的命令行脚本, yiic是linux的shell脚本, yiic.php是yiic的php脚本, yiic.bat是yiic的windows脚本.

asset

美 ['æset] 英 ['æset

创建的yii程序的目录结构是: index.php是入口文件; assets是公共资源文件(asset['2set'] ), css, images, themes,

protected(最重要的就是这个目录: 包括conf/main.php这个是主配置文件, controllers/这个是控制器目录, models/是模型目录,

views/是视图目录)..

应该多看的是yii的 文档- 导航标签中 的 内容:

YII框架的使用


两种方案和思想, 一种是直接访问localhost,把webapp直接放在localhost下, 另一种是放在localhost下的子目录中, 这样的好处是, 可以创建多个这样的子程序web

views: 包括site/index.php, 和 layouts/main.php, 一个视图文件就是按照layouts/main.php的布局, 然后加上site/index.php中的内容组成的,

也就说, 最后生成的内容: layouts/是布局/结构, site/index.php是内容.

熟悉了tp后, 来看yii就很容i了, 可以用tp的思维思想来学习yii, 反过来yii也可以加深对tp的理解

注意, yii的目录结构中的文件夹, 通常用的都是 "小写的" "复数", 如:views/,contrllers/, models/, commands/, components/等等

控制器的名称则是首字母大写的, 默认的是 SiteController. 方法的命名规范是: actionIndex.

class MyController extends Controller{
public function index(){
print('hello yii') ;
$this->render('index');
} }
这里创建的是My控制器, 控制器文件名应该是: MyController.php,同时, 在views/目录(注意是views目录下, 不是site目录! 那里的site目录是yii给我们的默认的
一个SiteController控制器所对应的视图文件夹), 下就应该有对应的文件夹my/. 注意控制器是首字母大写的, 而views/"控制器对应的视图目录名" 是小写的, 如这里的
MyController控制器对应的视图目录就是: views/my/. 然后, my目录下的文件如:index.php, do.php, login.php, article.php就是这个控制器类对应的方法名称,如: funtion actionIndex
function actionDo(), function actionLogin(). action的命名规则, 而对应的方法视图文件要用小写的! yii默认给我们提供了一个Site控制器和site视图子目录, 是可以直接使用的! 访问的时候, 输入的地址是: `localhost/yiidemo/index.php?r=Index/dosomething`, 其中r表示route路由, 后面跟上控制器名称和操作方法.

yii的组件, 都是以类的方式来提供的, 或许是受c/c++的影响太深, 都是以C开头的, 表示是"类",如CTreeView.php

渲染者: render+er: renderer.

framework中的内容组成: (a-z排序)

  1. base是他的核心基本类库, 包括程序的自举,启动, 运行: CApplication, CModel, CError, CException,CBehavior, CComponent, interface |.php
  2. caching,cli, collections(这个是yii的集合类, 包括CList.php, CMap.php, CQueue.php, CStack.php等类以及每个类对应的迭代类: CListIterator.php, CMapIterator.php,

    CQueueIterator.php, CStackIterator.php, CTypedList.php...)
  3. console, db(数据库相关的类...)
  4. messages类似于tp的languages
  5. views类似于ThinkPHP中的tpl/trace_jump.tpl等模板,如error, 404, 300.错误等等..
  6. 框架的核心还是web目录, 里面有widgets, services,和renderers, vendors第三方的, validators,和一些工具: utils 等等.

YII框架的使用


当前的yii的稳定版是1.1.17

YII框架的使用

YiiBase类中的方法基本上都是静态方法... public static function createWebApplication($config=null){ return self::createWebApplication($config);}

public和static的顺序:

  1. public通常在最前面, 说明访问权限, 因为这个是从外部 的访问者来说的, 这个离函数本身 "更远";
  2. 然后才是说明这个方法的性质, 是静态的, 还是动态的, 所以这个时候, 才用 static 来修饰.

    即: 一个函数的定义是: public static function a_public_static_func(){....}

  1. jquery的find查找方法

    find就是查找当前正在处理的元素的后代元素的方法。find方法,由前面的选择器指定选择范围,后面的find参数

    指定选择的内容。

    实际上 $(parent).find(descend) 就等同于 $(parent descend)

  2. html方法返回的是 元素的内容,(内部的东西) 元素本身的标签是不包括的 ,如:

<p> <span> span text<strong> strong text</strong></span></p>,
$('span').html(), 将会输出: span text<strong> strong text</strong>,
span本身的标签并不输出,即不会输出:<span> span text<strong> strong text</strong></span>

不管是前端还是后端, 都是在服务器上生成好代码后, 之后再 发送到浏览器的, php和html页面之间进行数据交换的操作都是在服务器上。唯一的区别只是发送到浏览器端的代码量有大有小, 差别只是体现在网络传输延迟上。 服务器端是不会渲染显示的, 服务器端只有代码!

键盘的选择还是以“柔和, 轻柔,柔软”的为好, 那种很硬,弹簧很硬的,质地很硬的不好...

strtr: r是replace替换的意思.

  1. strtr返回的是str的替换后的副本, 并不是str本身,
  2. 最好是使用 array replace_pairs

yiidemo用户自己的项目是如何运行起来的?

yiidemo 自己项目中的入口文件是: index.php, 它首先包含 framework框架中的yii.php, require_once $yii; ,

然后创建自己的应用程序: Yii::createWebApplication($config) -> run(); , 到此, web程序就运行起来了.

而yii.php是框架下的"入口文件", 它实际上是一个Yii的类, 这个类又继承自YiiBase类:

class Yii extends YiiBase {...} 最终, 由 YiiBase.php提供app的核心功能!

yii的应用程序有两种, 一种是console应用程序,一种是web应用程序

使用的都是 Yii::createApplication($class, $config=null){ return new $class($config); }, 返回的是一个类的对象实例;

根据这个class类名参数来决定是创建哪种app, 如果$class是 "CWebApplication", "CConsoleApplication"...

**页面的标题, 现在可以用函数来动态生成了, 只要使用pageTitle成员属性: 就好了: $this-> pageTitle = Yii::app() -> name. ' - About' ; **

什么叫Gii? 参考: http://blog.csdn.net/dogfish/article/details/6381402

当gii没有权限的时候: 设置: module 设置gii的时候 不是本地的要设置允许IP 'allowedIPs' => ['127.0.0.1', '::1', '192.168.1.*', 'XXX.XXX.XXX.XXX']

gii is a magic tool that can write code for you . 是yii的自动生成 代码 的工具.

在yii中使用gii, 只需要在protected/config/main.php中, 配置gii的模块module即可..

设置默认的控制器: 在protected/config/main.php中, 加上: defaultController => 'Index'; , 而且默认的方法就是 index: function actionIndex()...

render中的layout主要是包含: 公共的 头部和尾部...

自定义载入自己的模板文件?

  1. 将js, css等文件放在 项目/assets/(index或admin)/目录中
  2. 在views/controller_name/模板文件.php(zhuyi, 模板文件是php, 不是tp的html).
  3. 载入外部的css/js文件等. 由于外部项目目录路径是通过 <?php ... 来输出的. 所以这个不管是在action方法中, 还是在模板文件中都是可以使用的, 如果是原来的模板文件, 则用

    YII框架的使用
  4. 控制器向视图模板传递数据? 在控制器中, 使用 关联数组, 然后将这个关联数组变量, 作为render, 或renderPartial的第二个参数, 然后在模板中使用 关联数组的下标变量来输出:$data = array('var1' => 10, 'var2' => 20); $this -> render('index', $data); 然后在模板中使用 <?php echo $var1; ?> 来输出.
  5. 注意在yii中, 没有smarty, 等模板引擎, 都是用原生的php语句进行输出的. 但是对于foreach等具有 大括号的 语句输出, 也不使用大括号, 而是使用类似 "模板引擎"的方法, 在最后的时候, 用endforeach 的方式来输出: <?php foreach($article as $v): ?> 注意foreach后是冒号, 不是分号或大括号; <li> <?php echo $v->title; ?>(这里注意, 如果<?php中 , 只有一条语句, 那么可以不用加 分号!) </li> <?php endforeach; ?>

在yii中如何扩展自定义全局函数?

在protected/中创建一个functions.php文件(或func.php文件都可以, 反正后面要包含的). 然后在里面写上自定义函数.

使用时, 在 项目的入口文件 index.php中, 包含这个自定义函数文件: include_once './protected/functions.php';

不必只创建一个Index控制器,(虽然 你可以将很多/甚至全部逻辑业务 , 都放在一个Index控制器中,) 但是, 为了将业务逻辑分得更清楚一些, 也便于维护 , 可以多创建几个控制器,每个业务逻辑(单元模块功能),(甚至一个页面 "生成器" ) 创建一个控制器..., 而且注意 名称的大小写, 有些大写只是框架的命名规范所要求的. 其他地方, 该用小写的还是用小写.

yii包括其他框架(如tp)中, 使用 公共部分 -> layouts 布局, 一是便于有统一的布局样式, 另一个就是便于 修改和维护. yii的layouts比 tp要更好更清晰明确.

使用模板布局layouts的方法和步骤是:

  1. 分析公共区域, 但是要注意, assets中的内容, 如css, js可能不一样, 可以把link等 放在任何地方, 所以在layouts中要把它提取出来;
  2. 在protected/layouts/下创建我们自己的布局文件, 如 my.php

    YII框架的使用

这个控制器中, 有几个 public的成员变量, $layout, $menu, $breadcumbs, 等, 这些可以修改, 或者重载, public $layout = "//layouts/my"

  1. 创建布局文件, 将公共的部分提取出来, 放在my.php中 , 同时, 在需要单独显示具体模板内容的 地方 加入<?php echo $content ?> , 注意这个echo content 是放在布局中的, 不是放在具体的模板中的.因为实际在渲染的时候, 是先读取 布局文件, (这就要求凡是使用布局的 页面的结构 应该是一样的! ) 然后将布局文件中的content用 实际模板中的内容来替换的.
  2. 配置, 设置 protected/components/controller.php, 中 将 $this->layouts 换成我们自己的布局文件名: my(不需要加php)
  3. 修改其他业务对应的模板文件, 将重复的部分removed, 只需要自己单独显示的不同的部分

创建好自己的yii应用程序时, 里面的 **css和images和themes ** 是示例站点的资源. 如果你要 开发自己的web 程序, 这些文件夹(css, images, themes)可以删除不要.

如果你要写了 $this->render('index'); 那么就一定要有views的对应模板文件, 否则就会报错!

难道link的css文件要放在view 视图模板文件中吗? 不能放在 layout中?

<?php echo Yii::app()->request->baseUrl ?> 得到的就是 项目的目录路径.

==================

gii自动创建控制器等的用法:

  1. 在config/main.php中enable gii module : modules => array( 'gii'=>array(....) );

    本身gii是不安全的, 可能被黑客使用, 在开发创建过程中, 可以打开gii, 开发完毕后, 要关闭gii.

    class => 'system.gii.GiiModule' (其中, system就是framework框架目录, GiiModule是指CGiiModule.php文件. 包含了Yii::import "CCodeFile, CCodeModel, CCodeForm" 等类文件.

  2. 主要是用gii来产生 后台 模块. gii是通过web方式 web-based 来生成的.

  3. 注意,yii的配置文件, 只有用户项目中, 才有, yii核心代码framework中 是没有 config的.

  4. yii产生后台的方式, 和 前台跟后台 分离的方式 不一样, yii是吧 后台模块专门用gii来产生 的, 作为 modules/admin 来产生的, 而tp则是把前台和后台作为平等的 项目啦实现的.

  5. 创建时, 是访问的 index.php?r=gii, 创建完成后, 要访问后台模块: index.php?r=admin/default/index (r=模块id/控制器/方法). 而且后台模块也可以使用前台的布局layouts.

  6. 要调用 yii的面包屑导航, 使用的方法是: 只需要在 对应的 "模板文件" (注意是模板文件, 即$content包含的内容中) 定义好 breadcurmbs 成员变量就好了, 不要什么echo, print的, 输出的语句是在其他框架函数中.

 <?php
$this -> breadcrumbs = array(
$this->module->id, // 注意这里要用字符串, 不能是 $this->module. 这个将会是一个模块! 报错
'other', 'other2'... ); ?>
<h1> <?php echo $this->uniqueId. '/'. $this->action->id; ?> </h1>

最后生成的面包屑导航格式是: Home (默认就是从Home开始的) >>(indicator就是类似两个大于符号的) admin >> other >>other2( 因此, breadcrumbs的数组中, 有多少个元素, 就有多少级面包屑导航级数...

注意 , 所有的在views/index.php视图中的 $this, 都是指的 当前的控制器! 要获得控制器的方法和module , 都直接使用 $this->action->id, $this->module->id; 而要获得类本身的名称: 则要使用 get_class($this);  

__FILE___, 会把当前文件的 "完整路径 / + 文件名" 都显示出来.

通常 控制器 的 默认的 方法 都设置 设置 成 index方法: function actionIndex()..., 而且前台的目录项目名称 通常也设置成 index, 后台设置成 admin..

可以100% 的说, 不管是在函数中, 方法中, 还是array数组的配置文件中, 只要是碰到 "字符序列", 只要不是 明确使用的 (const, define(...)) 常量(大写的), 都应该看作是 "字符串", 都应该加上 字符串引号. 这个就不要再犯这样的错了!!


小物件widget的用法:

  1. widget主要是用在 表单上, 而且, 使用widget, 因为是来自类, 有隐含 的方法和操作 的. 所以有 很多自动化的操作.
  2. yii是完全oop的, 所以他的 表单 也是以类对象的方式 来使用的.
  3. 要使用表单的 widget, 先要创建表单对象, 然后调用表单对象的方法, 来创建相应的域:
在视图.php文件中
<?php
$form = $this -> beginWidget('CActiveForm');
echo $form -> textFiled('LoginModelObj 表单模型', '表单域的名称, 如usename, password等', '表单域的属性组成的数组: array('id'=>'username'...) ); $this->endWidget();
?> $form中的所有方法, 都是来自于 类CActiveForm的, 然后 , LoginModel extends CFormModel 其中, 模型要在 控制器方法中, 用new LoginModel() 的方式创建出来, 然后通过renderPatial的参数 传递到视图文件中... 要注意, $form -> textFiled('model_name', 'form_field_name', array_attr) 中的 表单域的名字, 在相应的模型LoginModel中要有相应的 public 成员变量, ...
上一篇:浏览器局部打印实现,iframe打印


下一篇:Python系列之入门篇——HDFS