Yii入门教程之目录结构、入口文件及路由设置


Posted in PHP onNovember 25, 2014

项目名称从“FantaCMS”修改成为“testyii”—————— 俗!

1,项目目录结构分析

Yii入门教程之目录结构、入口文件及路由设置

Yii入门教程之目录结构、入口文件及路由设置

2,Yii入口文件分析

Yii入门教程之目录结构、入口文件及路由设置

在Yii启动项目时,传递了项目主配置文件数组,那么Yii会在整个应用中绑定一个全局的Yii对象并且可以通过如下方法来调用该对象:Yii::app()

Yii系统把配置文件中的数组值,通过键值对的形式绑定到了该对象上,例如在配置文件中我们配置了:

'name'=>'My Web Application',

那么我们在项目的任何一个地方通过该对象的属性就可以获取到“name”的值,方法为:

Yii::app()->name;

3,Yii路由设置

Yii入门教程之目录结构、入口文件及路由设置

同时应该知道:对于控制器名,Yii首先会检测当前的控制器名是否是一个“模块名”,如果是模块名则先定位到模块。

“模块”会在后面搭建项目的时候解释。

通过上面的路由访问到的就是:SiteController.php类文件下的SiteController类中的actionIndex方法

控制器文件位于:protected/controllers 目录下,也就是我们的控制器文件存放目录

注意Yii中控制器文件和动作方法名的书写方式,控制器有统一的后缀”Controller“,动作方法也有统一的前缀”action“,同时要求动作方法名的命名规范符合”除第一个单词外其它每个单词的首字母要大写“

由于Yii默认的控制器名为:site

默认的动作名为:index

因此上述通过指定控制器名动作名访问的路径和直接访问:http://localhost/testyii/   的效果是一致的

4,视图调用

在动作方法中,调用:$this->render('index');

来为对应的动作方法指定视图文件,视图文件位于:protected/views/site  目录下

其中:site为对应的控制器名文件夹,每个控制器名在视图中都应该具有一个唯一的文件夹名与其相对应

然后在动作方法中通过‘index'来指定显示的具体视图文件是site控制器下的指定的‘index.php'视图文件

另外还需要注意:

调用视图的方法有两个:

$this->render                            ----> 会调用模板文件

$this->renderPartial                   -----> 不会调用模板文件

它们之间的区别,也如上所述。

5,视图模板设置

打开SiteController.php文件,其中的代码截图如下:

Yii入门教程之目录结构、入口文件及路由设置

我们发现:Yii应用中,每个控制器都要继承自公共控制器“Controller”

然后打开“Controller”控制器文件:Controller.php,它位于:protected/components  目录下

“Controller”控制器代码截图如下:

Yii入门教程之目录结构、入口文件及路由设置

Yii通过:public $layout='//layouts/column1'; 来指定动作方法的公共模板文件

公共模板文件位于:protected/views/layouts 目录下,如下图:

Yii入门教程之目录结构、入口文件及路由设置

现在我们来创建我们的模板文件:testlayout.php,代码如下:

Yii入门教程之目录结构、入口文件及路由设置

其中”<?php echo $content; ?>“为Yii中规定的模板文件中的内容替换方法

然后,修改 ”Controller“控制器中的模板文件为:public $layout='//layouts/testlayout';

然后访问:http://localhost/testyii/index.php?r=site/index    结果如图:

Yii入门教程之目录结构、入口文件及路由设置

然后我们发现,模板文件已经变成我们自己指定的了,然后假如你不需要视图文件渲染模板文件,那么你可以在动作方法中调用视图文件的时候使用:$this->renderPartial  方法

或者你整个项目都不需要调用模板文件,那么你可以在动作方法中调用视图文件时全部用:$this->renderPartial 

也或者将视图模板文件设置为”空“,例如:public $layout='';

下一节继续:Yii的魔术师:gii,Yii模块及模块自定义

PHP 相关文章推荐
用PHP和ACCESS写聊天室(三)
Oct 09 PHP
PHP数字格式化
Dec 06 PHP
dedecms模板标签代码官方参考
Mar 17 PHP
说明的比较细的php 正则学习实例
Jul 30 PHP
php 获取当前访问的url文件名的方法小结
Feb 08 PHP
PHP使用range协议实现输出文件断点续传代码实例
Jul 04 PHP
ThinkPHP模版引擎之变量输出详解
Dec 05 PHP
php购物车实现方法
Jan 03 PHP
深入浅析php json 格式控制
Dec 24 PHP
两种php实现图片上传的方法
Jan 22 PHP
Laravel框架模板继承操作示例
Jun 11 PHP
Swoole实现异步投递task任务案例详解
Apr 02 PHP
Yii入门教程之Yii安装及hello world
Nov 25 #PHP
php 伪造ip以及url来路信息方法汇总
Nov 25 #PHP
浅析php适配器模式(Adapter)
Nov 25 #PHP
浅析php原型模式
Nov 25 #PHP
浅析php创建者模式
Nov 25 #PHP
浅析php工厂模式
Nov 25 #PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 #PHP
You might like
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
php除数取整示例
2014/04/24 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python类的继承和多态代码详解
2017/12/27 Python
python 进程的几种创建方式详解
2019/08/29 Python
python读写文件write和flush的实现方式
2020/02/21 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
公司领导班子对照检查材料
2014/09/24 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
运动会观后感
2015/06/09 职场文书
大学军训通讯稿
2015/07/18 职场文书
感恩教师节主题班会
2015/08/12 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js
教你利用python实现企业微信发送消息
2021/05/23 Python