ThinkPHP 学习之控制器 ( Controller )

/**
 * ThinkPHP version 3.1.3
 * 部署方式:应用部署  * 文内的 http://localhost/ 由实际主机地址代替
 */

入口文件 index.php:

<?php

define(‘THINK_PATH‘,‘./ThinkPHP/‘);
//定义项目名称和路径
define(‘APP_NAME‘,‘Myapp‘);
define(‘APP_PATH‘,‘./home/‘);
define(‘APP_DEBUG‘,true);
//加载框架入口文件
require(THINK_PATH."ThinkPHP.php");

index.php

访问入口文件 index.php ( http://localhost/index.php ) 后自动生成 ./home 目录。

index 初始页面的内容由 ./home/Lib/Action/IndexAction.class.php 文件显示:

<?php
// 本类由系统自动生成,仅供测试用途
class IndexAction extends Action {
    public function index(){
    $this->show(‘<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p></div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>‘,‘utf-8‘);
    }
}

IndexAction.class.php

( 一 ) 控制器的调用

现在修改 IndexAction.class.php,使用 A 函数调用本项目控制器:

<?php

class IndexAction extends Action {

    public function test(){

        $obj = A("Member");
        $obj->user();
    }
}    

A 函数相当于 new,A("Member") 表示实例化本项目中的 Member 控制器,然后再调用 Member 控制器中的 user 方法。user 方法 ( MemberAction.class.php ):

<?php

class MemberAction extends Action{

    public function user(){

        $this->display();
    }
}

因为在 Index 控制器 中的 test 动作调用了 Member 控制器的 user 方法 ( 因为此处的 user 动作已被实例化,因此此处不能成为动作,而是作为类的方法 ) 的 $this->display(),所以需要在当前动作 ( test 动作 ) 中输出模板 ( ./home/Tpl/Index/test.html ) :

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>欢迎使用 ThinkPHP</body>
</html>

test.html

通过 PATHINFO 模式的 url ( http://localhost/index.php/index/test ,我的主机地址是127.0.0.26 ) 可以访问 Index 控制器的 test 动作

可以使用 R 函数来代替 A 函数,R 函数可以在调用控制时指定调用方法 ( 动作 ),修改 IndexAction.class.php:

<?php

class IndexAction extends Action {

    public function test(){

        $obj = R("Member/user"); //使用 R 函数调用本项目的控制器
    }
}

可以达到同样的效果。

( 二 ) 空控制器与空动作

空控制器和空动作可以实现错误 404 的功能 ( 但是不能取代服务器错误页面处理机制,空控制器和空动作只能处理 MVC 框架内的页面,而且也不能处理 URL REWRITE 自定义格式的页面 )。

1、空控制器

当用户访问的 URL 不存在需要访问的控制器时,可以使用空控制器,例如访问 http://localhost/index.php/bbs,实际上不存在控制器 BbsAction,系统会给出错误 ( 需要在入口文件 index.php 开启 define(‘APP_DEBUG‘,true); ):

现在在项目目录 ( ./home/Lib/Action ) 下创建控制器类文件 EmptyAction.class.php :

<?php

class EmptyAction extends Action{

    public function index(){

        $this->assign("msg","你所查看的栏目已经不存在");
        $this->display("./Public/html/error.html");
    }
}

同时在 WEB 根目录的 Public/html 下创建error.html,这样访问  http://localhost/index.php/bbs 出现的就是自定义的信息内容。

2、空动作

相较空控制器定位到栏目,空动作则是定位到具体的页面。如果 Index 控制器中不存在 user 动作,只需要在 Index 控制器中加入空动作,系统会把 _empty 动作代替 user 动作:

<?php

class IndexAction extends Action {

    public function test(){

        $obj = R("Member/user");
    }

    public function _empty(){

        $this->assign("msg","你所查看的页面不存在");
        $this->display("./Public/html/error.html");
    }
}

参考资料:《PHP MVC 开发实战》

时间: 2024-10-18 14:31:52

ThinkPHP 学习之控制器 ( Controller )的相关文章

ThinkPHP学习(二)理清ThinkPHP的目录结构及访问规则,创建第一个控制器

ThinkPHP的目录结构 回顾上一篇的安装目录: 目录对应关系 F:\\PHP├─index.php       入口文件├─README.md       README文件├─Application     应用目录├─Public          资源文件目录└─ThinkPHP        框架目录 thinkphp 的目录结构 ThinkPHP 的目录结构非常清晰和容易部署.大致的目录结构如下,以项目为基础进行部署. ┎━ThinkPHP 框架系统目录┃ ┝ ThinkPHP.ph

thinkphp学习笔记4—眼花缭乱的配置

1.配置类别 ThinkPHP提供了灵活的全局配置功能,ThinkPHP会依次加载管理配置>项目配置>调试配置>分组配置>扩展配置>动态配置,所以后面的配置权限要大于前面的,因为后面的配置会覆盖前面同名配置,同事会生辰配置缓存文件无需重复解析,减小开销. 惯例配置:在惯例配置内对大多数常用参数进行默认配置,因为惯例配置最先加载,优先级别最低,如果不需要做特殊配置的话,完全可以保持默认值,惯例配置位于ThinkPHP/Conf/convention.php,内容摘抄如下: &l

ThinkPhp学习01

原文:ThinkPhp学习01 一.ThinkPHP的介绍           MVC  M - Model 模型                工作:负责数据的操作  V - View  视图(模板)        工作:负责前台页面显示  C - Controller 控制器(模块) 工作:描述功能 框架二.ThinkPHP的获取            http://www.thinkphp.cn三.ThinkPHP核心文件介绍      ├─ThinkPHP.php     框架入口文件 

Thinkphp学习回顾(一)之基本结构目录

TP框架的学习一般都是从了解框架的基本结构开始的,每个文件都有其专属的作用,我的TP框架的回顾也从基本结构开始讲起. 一.ThinkPHP的获取 http://www.thinkphp.cn   这是官方网址,我的TP学习使用的是3.1.3完整版 下载之后,将文件名改为Thinkphp,然后放到自己的项目文件夹下,比如我们要做的项目就是bbs,也就是留言板. 二. 搭建基本结构    //TP 中结构的搭建是自动的 TP 中结构的搭建是自动的,我们只需要在bbs文件夹下建一个index.php的

thinkphp学习笔记5—模块化设计

1.模块结构 完整的ThinkPHP用用围绕模块/控制器/操作设计,并支持多个入口文件盒多级控制.ThinkPHP默认PATHINFO模式,如下: http://serverName/index.php(或者其他应用入口文件)/模块/控制器/操作/[参数名/参数值...] 应用:由同一个入口文件访问的项目称为一个应用,在完整版的代码中就是Application 模块:一个应用下面可以包含多个模块,每个模块对应独立的目录,在完整版的代码中有Admin,Home,Common,Runtime四个模块

thinkphp学习笔记7—多层MVC

原文:thinkphp学习笔记7-多层MVC ThinkPHP支持多层设计. 1.模型层Model 使用多层目录结构和命名规范来设计多层的model,例如在项目设计中如果需要区分数据层,逻辑层,服务层等不同的模型层可以在模块目录下创建Model,Logic,Service目录,把对用户表的所有模型操作分成3层. 1.Model/UserModel用于定义数据相关的自动验证,自动完成和数据存取接口 2.Logic/UserLogical用于定义用户相关的业务逻辑 3.Service/UserSer

ThinkPHP学习(三)配置PHP5支持MySQL,连接MySQL数据库

上一篇:ThinkPHP学习(二)理清ThinkPHP的目录结构及访问规则,创建第一个控制器 配置PHP5支持MySQL 打开PHP配置文件“F:\PHP\php5328Win32\php.ini”,查找“extension=php_mysql.dll”, 把前面的分号去掉,保存文件,启动服务: 却提示“PHP startup: Unable to load dynamic library :F:\PHP\php_mysql.dll”错误, 解决办法,打开PHP配置文件“F:\PHP\php53

Thinkphp学习笔记------- RBAC

1.首先去extends扩展包里找到RBAC类 2.复制里面创建四张表的SQL语句放到mysql里执行,得到四张表. 3.需要自己创建一个user表,字段随意,一般是username password之类存储用户登录信息. 4.RBAC一般就是六个方法:依次为-->用户列表   角色列表   节点列表  添加用户  添加角色  添加节点 5.操作顺序是-->添加角色-->添加节点-->给角色分配节点-->添加用户-->给用户指定角色 6.对角色表(role)进行添加和L

ThinkPhp学习02

原文:ThinkPhp学习02 一.什么是MVC                M -Model 编写model类 对数据进行操作 V -View  编写html文件,页面呈现 C -Controller 编写类文件(UserAction.class.php)二.ThinkPHP的MVC特点        三.ThinkPHP的MVC对应的目录    M 项目目录/应用目录/Lib/Model V 项目目录/应用目录/Tpl C 项目目录/应用目录/Lib/Action四.url访问C