上篇随笔写完的是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/post
mkdir D:/php/workspace/my_demo/index/protected/controllers/admin
generate PostController.php
mkdir D:/php/workspace/my_demo/index/protected/views/admin
mkdir D:/php/workspace/my_demo/index/protected/views/admin/post
generate index.php Controller '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>

查看页面内容:

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

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

  1. 一周试用yii开发一个带各种该有功能的web程序(三)

    接上篇,为什么index 模版里没有任何有关require,inculde类型关键字,却任然有我们认为“多余”的字符出现.因为在至少我的认知里html的结构该是<html><head ...

  2. 用Vue开发一个实时性时间转换功能,看这篇文章就够了

    前言 最近有一个说法,如果你看见某个网站的某个功能,你就大概能猜出背后的业务逻辑是怎么样的,以及你能动手开发一个一毛一样的功能,那么你的前端技能算是进阶中高级水平了.比如咱们今天要聊的这个话题:如何用 ...

  3. 快速入门PaddleOCR,并试用其开发一个搜题小工具

    介绍 PaddleOCR 是一个基于百度飞桨的OCR工具库,包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别.竖排文本识别.长文本识别.同时支持多种文本检测.文本识别的训练算法. ...

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

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

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

    引言:在智能手机软件的装机量中,天气预报类的APP排在比較靠前的位置.说明用户对天气的关注度非常高.由于人们不管是工作还是度假旅游等各种活动都须要依据自然天气来安排.跟着本文开发一个"微天气 ...

  6. 用Bottle开发web程序(二)

    返回码 在开发web程序时,除了一些服务器错误等,常常需要自定义返回码,以便告诉用户处理请求的结果或者状态.bottle支持自定义的返回码,可以通过以下几种方式进行实现. abort 在bottle中 ...

  7. yii开发一个web程序的基本流程

    1. 创建目录结构.在前面的章节Creating First Yii Application写的yiic工具可以帮助我们快速完成这步. 2. 配置 application.就是修改applicatio ...

  8. 开发一个带UI的库(asp.net core 3.0)

    在GitHub上有个项目,本来是作为自己研究学习.net core的Demo,没想到很多同学在看,还给了很多星,所以觉得应该升成3.0,整理一下,写成博分享给学习.net core的同学们. 项目名称 ...

  9. 基于vue来开发一个仿饿了么的外卖商城(二)

    一.抽出头部作为一个组件,在底部导航的时候可以相应的显示不同的标题 技术点:使用slot进行组件间的通信:父组件给子组件传值(子组件里面通过props接收父组件传过来的数据) 查看链接:https:/ ...

随机推荐

  1. 下载php扩展笔记

    查找相关php的扩展网址https://pecl.php.net/index.php PECL 的全称是 The PHP Extension Community Library ,即PHP 扩展库.是 ...

  2. 将List下载到本地保存为Excel

    直接附上代码 /// <summary> /// 将List保存为Excel /// </summary> /// <typeparam name="T&quo ...

  3. 第一章-第七题( 有人认为,“中文编程”, 是解决中国程序员编程效率一个秘密武器,请问它是一个 “银弹” 么? )--By 侯伟婷

    首先,“银弹”在百度百科中的解释是银色的子弹,我们更熟知的“银弹”一词,应该是在<人月神话>中提到的.银弹原本应该是指某种策略.技术或者技巧可以极大地提高程序员的生产力[1].此题目中关于 ...

  4. Canvas小游戏里,删除过期或者死亡元素技巧

    在许多canvas游戏,canvas效果中,经常会有过期的元素需要删除 例如现在需要制作一个笨鸟先飞(flappy bird)小游戏,游戏中障碍物(且称为柱子),此时会有一个全局变量保存所有柱子的实例 ...

  5. [IT新应用]家用NAS,自建“360云盘”

    360云盘也快要离开了.同事中有人开始尝试使用群晖NAS.西数的NAS来自建云了. [功能对比] [选择参数] [口碑评价]

  6. logoff remote desktop sessions via command line tools

    This trick I learned from my one of ex-college.  In Windows servers, only two remote desktop session ...

  7. WordPress基础:自定义菜单

    需要自定义一个菜单,可以访问后台->外观->菜单

  8. HTML第二本书学习后记

    1,换行标记<br>,不换行标记<nobr></nobr> 2,添加水平线 <hr> 3,插入特殊符号:   空格 &nbsp    " ...

  9. scanf、printf、gets、puts的应用及区别

    1.scanf()函数 函数scanf()按指定的格式从键盘读取数据,并将其赋给一个或多个变量.例如: scanf(“%d %f”, &x,&rate);  输入多个变量时,scanf ...

  10. Selenium2学习-039-WebUI自动化实战实例-文件上传下载

    通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...