上篇随笔写完的是yii能使用简单的命令创建出一个基本的架构,我们只需要在这个架构上进行代码编写,扩展功能。而生成的一个小型系统是可以操作的,但是不是我们想要的,所以,这篇结合源码讲如何创建出我们自己的页面,并进行操作。

  那么yii是怎么处理这么一套流程的呢?

  大致执行过程。

  1. 请求访问index.php

  2. 由index.php作为一个初始化项目环境脚本,加载config/文件夹下的配置,构造出请求特征。

  3. 根据请求的url,找到对应的控制器。

  4. 在根据请求的url,找到请求的在控制器中的处理方法,在该方法中执行业务逻辑。

  5. 调用模版。还是根据控制器的URL特点,找到指定模版的位置,参数传入,执行代码,返回body给调用处。

  6. 完成一次请求。

先看以上流程提及的可能使用的文件及文件夹。

index.php自动生成的代码:

<?php// change the following paths if necessary
$yii=dirname(__FILE__).'/../framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);require_once($yii);
Yii::createWebApplication($config)->run();

这里项目的几个目录,我们在框架中已经定义的比较死了。

views为模版目录,下面会根据控制器进行创建一个文件夹,还会在文件夹下在创建一个对应控制方法的模版。

controllers为控制器文件夹,控制器文件名为:控制器Controller.php,如SiteController.php而文件中只有一个类,类名也为控制器Controller,如SiteController

控制器中的行为方法为“action行为”,形如:

public function actionIndex()

那么就在views中存在了这么一个模版,/views/site/index.php

当然,所有这些,其实不用强记,只为了解,因为yii给我们提供了命令行工具,自动创建一个满足以上这些规则的控制器,模版。

部分源码实现:

//默认行为
public $defaultAction='index';
//默认的控制器
public $defaultController='site';
//查找对应控制器
public function runController($route)//查找对应的控制器
    {if(($ca=$this->createController($route))!==null)//创建一个控制器和得到控制器ID。
        {list($controller,$actionID)=$ca;$oldController=$this->_controller;$this->_controller=$controller;//将最新的控制器ID作为奔雷的控制器属性,供全局使用。$controller->init();//控制器初始化。到底调用的那个类的方法。$controller->run($actionID);//运行对应的控制方法。$this->_controller=$oldController;//重置当前控制器为初始值。
        }}
//控制器类名称结合
$className=ucfirst($id).'Controller';$classFile=$basePath.DIRECTORY_SEPARATOR.$className.'.php';
//控制器方法的处理
$id[0]=strtolower($id[0]);return array(new $className($controllerID.$id,$owner===$this?null:$owner),$this->parseActionParams($route),);

这里主要实现的是真正的业务逻辑,下面说如何用命令行方式创建出另外的控制器,另外的模版。

进入cmd模式,执行shell命令。

D:\php\workspace\my_demo\index>php protected/yiic.php shell
Yii Interactive Tool v1.1 (based on Yii v1.1.10)
Please type 'help' for help. Type 'exit' to quit.
>> help

输入help,查看到有如下命令:

At the prompt, you may enter a PHP statement or one of the following commands:- controller- crud- form- help- model

这里我们使用控制器。

>> controller admin/postmkdir D:/php/workspace/my_demo/index/protected/controllers/admingenerate PostController.phpmkdir D:/php/workspace/my_demo/index/protected/views/adminmkdir D:/php/workspace/my_demo/index/protected/views/admin/postgenerate index.phpController 'admin/post' has been created in the following file:

提示我们说创建了这些东西。那么查看是否生成

views里:

也就是说,我们可以通过命令生成符合yii命名规则的要求文件。

那么,如果我们想将原来的博客系统换成我们自己的网站,由yii系统我们知道我们需要修改views中site的index.php。

修改index.php内容为:

<html>
<head>
</head>
<body>
<center>这是我自己的第一个页面,虽然将原来的大段内容删除了。不在是一个博客</center>
<a href="/admin/post/index/">指向admin/post/index.php的内容</a>
</body>
</html>

查看页面内容:

但是,为什么会有其他内容?我希望看到的是一个干净的页面啊。

转载于:https://www.cnblogs.com/CLTANG/p/2638755.html

一周试用yii开发一个带各种该有功能的web程序(二)相关推荐

  1. 用Qt在Iinux上开发一个带UI的工业控制系统,应该用C++还是QML

    用Qt在Iinux上开发一个带UI的工业控制系统,应该用C++还是QML? 之前有人推荐说要用QML,QtQuick来开发.可是学习了一段时间对于QML和C++的混合编程还是不甚理解,觉得还是应该用C ...

  2. 利用css transition属性实现一个带动画显隐的微信小程序部件

    我们先来看效果图 像这样的一个带过渡效果的小部件在我们实际开发中的应用几率还是比较大的,但是在开发微信小程序的过程中可能有的小伙伴发现transition这个属性它不好使(下面说明)所以我们这个时候会 ...

  3. 稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器...

    [索引页] [×××] 稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器 作者:webabcd 介绍 Silverlight 2.0 ...

  4. 用python开发一个背单词软件-python实现屏保程序(适用于背单词)

    今天要给大家分享的是一款自己写的屏保程序,大学大家最头疼的就是四六级的考试了,上次考试做阅读的时候,情不自禁的发呆,想着如果我能在电脑上写一个屏保程序,那么就可以天天记单词了! 开始 首先:我们使用的 ...

  5. html搜索区域选择框,设计一个带选择和提示功能的检索框(分步介绍)

    好多网站的搜索输入框设计的很漂亮,接下来笔者将逐步介绍如何设置自己的搜索输入框. 设计效果图: 该效果主要采用CSS样式与Javascript进行实现.不得不说CSS样式功能很强大,而且效果很炫,笔者 ...

  6. 动手开发一个名为“微天气”的微信小程序(下)

    摘要: 上期我们介绍了"微天气"的API与界面代码编写,今天我们继续介绍逻辑层代码以及查询代码的编写. 本文选自<从零开始学微信小程序开发>. 编写逻辑层代码 由于在i ...

  7. javascript实现的一个带下拉框功能的文本框

    我们需要一个可选的下拉框来选取内容,但是但是又有可以自定义输入的需求.对于这种需求,大部分网站使用的都是一个下拉框和一个 input text ,并列或分行给出选择.那么,我们希望它看上去像一个可以输 ...

  8. 用IDEA开发一个简单的Spring MVC的Hello World程序,表单程序

    1.下载Tomcat,并添加如下用户环境变量,并添加CLASSPATH变量 ### CATALINA_BASE F:\apache-tomcat-7.0.90 ### CATALINA_HOME F: ...

  9. 【JAVAWEB开发】带你零基础学JAVA项目(二嗨租车项目篇)

    哈喽~大家好呀,时隔一个月,这次的一个小项目来喽,这次的 "二嗨租车项目" 使用的是的 oracle + JDBC + 集合 + 面向对象 + 分层思想(MVC),接下来就来看看吧 ...

最新文章

  1. 重磅!首次发现人类大脑海马体在短时间尺度上对时间信息敏感
  2. Python基础day07【文件读写、文件夹操作、面向对象(类、对象)】
  3. Failed to install *.apk on device *: timeout
  4. python自动备份数据库_Python Mysql自动备份脚本
  5. android 命令使用详解,Android下pm 命令详解
  6. 小波包能量matlab,小波包分析和小波包能量介绍.doc
  7. mmc检测到此管理单元发生一个错误_理解这八大优势,才算精通单元测试
  8. vue element dialog 对话框
  9. Comparable与Comparator异同
  10. Sparkstreaming实时开发详解
  11. Google Chrome与Apple Safari内核-webkit
  12. XML中的大于等于号,如何处理
  13. k8s部署rabbitMQ集群
  14. BAT文件执行输出中文乱码
  15. 不同型号阵列卡相关工具的使用简介
  16. 搞懂回溯算法,我终于能做数独了
  17. 【计算思维题】少儿编程 蓝桥杯青少组计算思维题真题及解析第2套
  18. 【Arduino 连接DHT11 湿度和温度传感器】
  19. 物联网技术在智慧电网中的应用-Susie 周
  20. Eclipse常见问题之英文状态下输入的英文字体不正确的解决方法

热门文章

  1. pytorch torch.stack
  2. centos7 安装mysql8
  3. Hadoop HIVE 安装配置(单机集群)
  4. linux systemctl
  5. 数据结构之基于Java的顺序栈实现
  6. pandas 股票分析图
  7. Linux静态库与动态库
  8. python语言在命名上是什么敏感的_一文轻松掌握python语言命名规范规则
  9. 分布式SQL学习总结(2)——TiDB 的现在和未来
  10. Spring学习总结(26)——Spring事务原理详解