如何新增控制器?

在Lib/Action中新增一个控制器:ProductAction.class.php:

<?php

class ProductAction extends Action{
    
    public function index(){
        echo 'product模块 , index方法';
    }
}

然后通过url访问: 这此要引入一个非常重要的一个概念:

url调度模式:就是我们在访问网站时的使用不同的ur访问方式

tp支持四种访问方式:可以通过URL_MODEL参数来控制。

1.普通模试:默认都支持

www.tp.com/index.php?m=Product&a=index&id=1

m模块名

a动作

2.pathinfo模(tp中的默认调度模式):

http://www.tp.com/index.php/Product/index/id/1/name/zhangsan

product模块名

index方法名

id是参数

1为值 。。。。。 一般都后面的参数都是成对出现的。以/分隔。

3. rewrite模式,即重写。 在页面静态化中用的

可以把入口文件省略掉:

http://www.tp.com/Product/index/id/1/name/zhangsan

设置方法:

1、httpd.conf配置文件中加载了mod_rewrite.so模块

2、AllowOverride None将None改为All  (注意不能与 #Options Indexes同时出现,否则会出现没有权限访问)

3、确保URL_MODEL设置为2

4、把下面的内容保存为.htaccess文件放到入口文件的同级目录下

<IfModulemod_rewrite.c>

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

</IfModule>

4.兼容模式:

如果不支持web服务器不支pathinfo或rewrite模式,但我们还想使用,可以考虑用兼容模式

http://www.tp.com/index.php?s=Product/index/id/1/name/zhangsan

或者:http://www.tp.com/?s=Product/index/id/1/name/zhangsan

在配置文件中,一个URL_MODEL的0123分别表示。默认都支持,这是怎么回事????

无论什么模式都支持普通模式,在表单提交的时候就可以看出区别了。

路径分隔符:'URL_PATHINFO_DEPR'     => '-',    // PATHINFO模式下,各参数之间的分割符号

http://www.tp.com/?s=Product-index-id-1-name-zhangsan

控制器中的空操?用这个方式可以简化url,利用它的一个特点。

系统在找不到指定的方法,执行的方法。

在控制器内加入如下方法:

/*
     * $name 表示请求的方法
     */
    public function _empty($name){
        echo '请求页面无法显示'.$name;
    }

5、 空模块

空模块的概念是指当系统找不到指定的模块名称的时候,系统会尝试定位空模块(EmptyAction),利用这个机制我们可以用来定制错误页面和进行URL的优化。

l  EmptyAction

MODULE_NAME

我们现在尝试请求一个url

http://localhost/tp/index.php/Student/shanghai

由于我们系统中没有StudentAction这个控制器,所以会报错

我们在项目创建一个叫EmptyAction类,以后,如果系统找不到相应模块时,会自动定位到这个Action中,如果我们在这个类中再添加一个叫_empty的方法,这样一样,可以屏蔽所有来自url的错误

5、 项目分组

在大型项目里,一个大的项目往往是由若干个小项目组成。比如说:可能是由

前台项目、后台项目、会员博客、论坛

l  config.php

l  APP_GROUP_LIST              分组列表

l  DEFAULT_GROUP               默认分组

在我们项目中,现在开始分组:

1)前台项目       Home

2)后台项目         Admin

修改配置文件:

一般来说:如果项目中分组,那么,你的控制器和模板也是需要分组的,模型是不需要分组的

在lib/Action目录下,创建两个文件夹叫Home,Admin,将之前的所有控制器放到Admin下,

Pathinfo模式:

http://www.tp.com/index.php/Home/Student/read

普通模式:

http://www.tp.com/index.php?g=Home&m=Student&a=read

http://www.tp.com/index.php?g=Admin&m=User&a=add

如果不指定分组,则走默认分组。

http://www.tp.com/index.php?m=Student&a=read

一般地,模板和控制器要分组,模型不分组。

5、 url大小写

默认来讲,url是区分大小写的

‘URL_CASE_INSENSITIVE’=>true  表示不区分大小写

6、 前置后置操作

_before_

_after_

publicfunction _before_index(){}

publicfunction index(){}

publicfunction _after_index(){}

举例:比我们有一个方法叫index,设置它的前置和后置操作是指

添加一个方法叫  _before_index,表示前置操作

添加一个方法叫  _after_index,表示后置操作

在执行index方法之前,会自动先执行_before_index方法,执行完index方法之后,会自动执行 _after_index方法

6、 页面跳转/页面重定向

在控制器中,有两个方法,分别是success和error,表示操作在成功或失败时的跳转地址

l  success

l  error

在配置文件config.php中,有两个配置选项,分别表示success方法和error方法所使用的模板文件路径,如果有需要,可以考虑自定义

l  TMPL_ACTION_SUCCESS

l  TMPL_ACTION_ERROR

用到一个叫模板常量:__URL__

<form method="get" action="/index.php/user/checklogin"> //表示当前模块的路径再加上checklogin方法

$this->redirect(“news/show”, array(‘id’=>2)); 重定向到news模块的show方法,并带个id的参数

可以跳当前模块、其他模块和跨项目的跳转。。。

5、 获取系统变量

l  _get          $_GET

l  _post         $_POST

l  _request           $_REQUEST

l  _session            $_SESSION

l  _cookie            $_COOKIE

l  _server             $_SERVER

语法:  $this->方法();

5、 判断请求类型

isGet()

isPost()

THINKPHP之控制器的更多相关文章

  1. ThinkPHP新建控制器

    ThinkPHP新建控制器 一.效果图 二.步骤 1.新建控制器文件 2.编写控制器文件 3.访问控制器 三.注意事项

  2. selected 刷新页面后selected选中的值保持不表(thinkphp 从控制器assign 传值到js)

    昨晚解决select 刷新页面以后选择的值保持不变,要想让seleted不变,有两种思路, 1,在提交表单的时候,将所选择的option的属性设为checked . 2.将option的value或者 ...

  3. thinkphp空控制器的处理

    <?php namespace Admin\Controller; use Think\Controller; class DengLuController extends Controller ...

  4. ThinkPHP跨控制器调用方法

    跨控制器调用方法 1. 先造对象,再调用里面的方法 $sc=new \Home\Controller\IndexController();  用绝对路径找echo $sc->ShuChu(); ...

  5. thinkphp 插件控制器

    3.2.2版本开始支持插件控制器的调用,可以通过更加方便的URL地址访问到模块中的插件定义的控制器. 当URL中传入插件控制器变量的时候,会自动定位到插件控制器中的操作方法. 大理石平台精度等级 插件 ...

  6. thinkphp 空控制器

    空控制器的概念是指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController),利用这个机制我们可以用来定制错误页面和进行URL的优化. 大理石平台价格表 现在我们把前 ...

  7. thinkphp通用控制器

    <?php namespace 目录\Controller; class TypeController extends Controller { public function add() { ...

  8. Thinkphp控制器,1.多层控制器2.多级控制器

    1.多层控制器 ThinkPHP的控制器支持多层和多级,多层指的是控制器可以分层,例如除了默认的Controller控制器层(我们可以称之为访问控制器),还可以添加事件控制器(层),例如: ├─Con ...

  9. thinkphp 在本地正常,在云端ubuntu下报控制器不存在

    thinkphp 在本地正常,在云端ubuntu下报控制器不存在的错 ubuntu是严格区分大小写的,本地的服务器可能对大小写要求没有那么严格, thinkphp的控制器的文件夹默认是小写字母,如果你 ...

随机推荐

  1. mevan引入容联云通讯jar

    首先从官网下载jar 然后拷贝到lib目录下 最后在pom.xml中这样写 <dependency> <groupId>cn.com</groupId> <a ...

  2. Sybase datetime 时间转换格式 convert(varchar(10),字段名,转换格式)

    convert(varchar(10),字段名,转换格式)sybase下convert函数第三个参数(时间格式)比如:1.select user_id,convert(varchar(10),dayt ...

  3. 知问前端--Ajax

    本节课主要是创建一个问题表,将提问数据通过 ajax 方式提交出去.然后对内容显示进行布局,实现内容部分隐藏和完整显示的功能. 一.Ajax 提问创建一个数据表:question,分别建立:id.ti ...

  4. DataGrid( 数据表格) 组件[9]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  5. css3新增的背景属性

    有时候我们需要往边框文字上添加背景与背景图片的时候就有用处了 background的css3有两个新增属性分别是background-clip与background-origin;背景-修剪与背景起点 ...

  6. 转载——SqlServer之like、charindex、patindex

    转载自:http://www.2cto.com/database/201305/214967.html SqlServer之like.charindex.patindex   1.环境介绍 测试环境 ...

  7. php生成批次唯一code(转)

    /** * @param int $no_of_codes//定义一个int类型的参数 用来确定生成多少个优惠码 * @param array $exclude_codes_array//定义一个ex ...

  8. HTML&CSS基础学习笔记1.2-HTML的全局属性?

    HTML元素都有属性,下面的这些全局属性是所有的HTML元素都可以使用的. 常见的有: HTML元素也有一些本身自己独特的属性,我们以后的笔记中有机会,会再为大家介绍哦. 下面是代码测验,具体的内容可 ...

  9. 遗传算法matlab实现

    我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 以下运用MATLAB实现遗传算法:   clc clear   %参数 a = 0 ; b = 4 ; e ...

  10. iOS:界面适配--iPhone不同机型适配 6/6plus

    iOS:界面适配--iPhone不同机型适配 6/6plus        机型变化 坐标:表示屏幕物理尺寸大小,坐标变大了,表示机器屏幕尺寸变大了: 像素:表示屏幕图片的大小,跟坐标之间有个对应关系 ...