THINKPHP之控制器
如何新增控制器?
在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之控制器的更多相关文章
- ThinkPHP新建控制器
ThinkPHP新建控制器 一.效果图 二.步骤 1.新建控制器文件 2.编写控制器文件 3.访问控制器 三.注意事项
- selected 刷新页面后selected选中的值保持不表(thinkphp 从控制器assign 传值到js)
昨晚解决select 刷新页面以后选择的值保持不变,要想让seleted不变,有两种思路, 1,在提交表单的时候,将所选择的option的属性设为checked . 2.将option的value或者 ...
- thinkphp空控制器的处理
<?php namespace Admin\Controller; use Think\Controller; class DengLuController extends Controller ...
- ThinkPHP跨控制器调用方法
跨控制器调用方法 1. 先造对象,再调用里面的方法 $sc=new \Home\Controller\IndexController(); 用绝对路径找echo $sc->ShuChu(); ...
- thinkphp 插件控制器
3.2.2版本开始支持插件控制器的调用,可以通过更加方便的URL地址访问到模块中的插件定义的控制器. 当URL中传入插件控制器变量的时候,会自动定位到插件控制器中的操作方法. 大理石平台精度等级 插件 ...
- thinkphp 空控制器
空控制器的概念是指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController),利用这个机制我们可以用来定制错误页面和进行URL的优化. 大理石平台价格表 现在我们把前 ...
- thinkphp通用控制器
<?php namespace 目录\Controller; class TypeController extends Controller { public function add() { ...
- Thinkphp控制器,1.多层控制器2.多级控制器
1.多层控制器 ThinkPHP的控制器支持多层和多级,多层指的是控制器可以分层,例如除了默认的Controller控制器层(我们可以称之为访问控制器),还可以添加事件控制器(层),例如: ├─Con ...
- thinkphp 在本地正常,在云端ubuntu下报控制器不存在
thinkphp 在本地正常,在云端ubuntu下报控制器不存在的错 ubuntu是严格区分大小写的,本地的服务器可能对大小写要求没有那么严格, thinkphp的控制器的文件夹默认是小写字母,如果你 ...
随机推荐
- 用java实现Simsimi小黄鸡接口
package com.iask.webchat.chatmachine; import java.io.BufferedReader; import java.io.InputStream; imp ...
- C++类的const成员函数、默认的构造函数、复制形参调用函数(转)
C++类的const成员函数 double Sales_item::avg_price() const { } const关键字表明这是一个const成员函数,它不可以修改Sales_item类的成员 ...
- Java基础知识强化43:StringBuffer类之StringBuffer和String的相互转化
1. String和StringBuffer的相互转换 思想是:A-----B的转换,我们把A转换为B,其实是为了使用B的功能:B-----A的转换,我们可能的结果是A类型,所以还要转换回来 2. 案 ...
- ComboTree( 树型下拉框) 组件
本节课重点了解EasyUI中Tree(树)组件的使用方法, 这个组件依赖于Combo(下拉框)和 Tree(树)组件.一. 加载方式//class 加载方式<select id="cc ...
- CSharp命名风格
1.大小写约定 为了区分一个标识符中的多个单词,把标识符中的每个单词的首字母大写.不要用下划线来区分单词,或者在标识符中任何地方使用下划线,有两种方式适合大写标识符的字母: PascalCasing( ...
- JS跨域请求之JSONP
在项目开发中遇到跨域的问题,一般都是通过JSONP来解决的.但是JSONP到底是个什么东西呢,实现的原理又是什么呢.在项目的空闲时间可以好好的来研究一下了. JSONP的产生 1.众所周知,Ajax请 ...
- ORACLE基本SQL语句-用户及建表篇
一.用户相关SQL语句 /*新建用户*/create user ; 说明:SA用户名,2013密码 /*授权connect,resource给用户sa*/grant connect,resource ...
- Linux 下 oracle 导入数据库—数据泵方式导入dmp文件
dmp导出数据源的oracle版本是12c,我本地oracle版本是11g,这在导入数据过程中导致出现错误 一.用system 用户登录oracle,我忘记了system密码,解决办法: [oracl ...
- 【C#】.NET中设置代理服务器浏览网页的实现--转载
目前很多种类的浏览器中都有代理服务器的设置,用户可以通过浏览器自定义更换自己的IP,实现在线代理翻(河蟹)墙浏览网页. 而在.NET中,亦可以通过调用API函数InternetSetOption来实现 ...
- eclipse安装ADT插件重启后不显示Android SDK Manager和Android Virtual Device Manager图标的一种解决办法
通常安装,搭建安卓环境后,不显示Android SDK Manager和Android Virtual Device Manager ize解决方法:Eclipse ->window->c ...