thinkphp空操作和配置文件实现简化路由
1关于TP中空操作和路由问题
<?php
function test(){
$content="test demo @云峰天下";
$pattern='/@(\S+)\s/';
$content=preg_replace($pattern,'<a href="'.__APP__.'/user/index/uname/\\1">\\1</a>');
return $content;
}
最近在做一个微博,有一块是微博内容@用户加链接,跳转到用户页,刚开始感觉没什么难的,可以通过正则替换实现。
就像上面一样,将用户名使用get传值带到相应的控制器下面的方法下去。但是url确实太长,看了下视频中的介绍,使用了
空操作和路由进行了处理。
<?php
function test(){
$content="test demo @云峰天下";
$pattern='/@(\S+)\s/';
$content=preg_replace($pattern,'<a href="'.__APP__.'/user/\\1">@\\1</a>');
return $content;
}
将代码进行修改后如上,修改后链接是这样:<a href="localhost/weibo/user/云峰天下">@云峰天下</a>,但是user控制器下是没有这个方法的?
最后看完视频感觉tp挺强大的,是通过定义一个空操作和通过用户名获取用户id,再通过配置路由从而实现简化路由
/**
* 空操作
*/
function _empty($name){
$this->_getUrl($name);
}
/**
* 处理用户名空操作,获得用户ID,跳转至用户个人页
*/
private function _getUrl($name){
$where=array('username'=>$name);
$uid=M('userinfo')->where($where)->getField('uid'); if(!$uid){
redirect(U('Index/index'));
}else{
redirect(U('/'.$uid));
//redirect(U('index',array('uid'=>$uid)));
}
}
在上面中由于是访问user下的每个用户名作为方法,会执行_empty()方法,该方法下调用私有方法_getUrl(),跳转到localhost/weibo/index.php/4(用户id号),由于该模块不存在,因此需要通过配置文件中的路由配置实现,如下
//URL路由配置
'URL_ROUTER_ON'=>true, //开启路由功能
'URL_ROUTE_RULES'=>array( //定义路由规则
':id\d'=>'User/index'
)
thinkphp空操作和配置文件实现简化路由的更多相关文章
- Thinkphp空操作空模块
空操作和空模块很有实用意义,他有些类似于PHP虚拟机自定义的404页面,利用这个机制我们可以更好的实现URL和错误页面的一些优化. 一.空模块: 很好理解,就是当你执行不存在模块的 ...
- Thinkphp 空操作、空控制器、命名空间
1.空操作 空操作是指系统在找不到请求的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化. http://网址/index.php/Hom ...
- ThinkPHP空操作与命名空间
命名空间:相当于一个虚拟的目录 正常管理文件使用文件夹--物理区分 TP框架的初始命名空间是:ThinkPHP\Library 在TP框架下命名空间里面使用\代表的是初始命名空间(ThinkPHP\L ...
- ThinkPHP空操作及命名空间
空操作是指访问不存在的路径: 解决方法:在控制其中创建 _empty方法 空控制器是指访问存在的控制器: 解决方法:创建EmptyController控制器 命名空间: 初识命名空间是Library: ...
- ThinkPHP空操作和空控制器的处理
所谓的空操作和空控制器,简而言之就是系统中不存在该方法或控制器,导致系统报错(本文版本3.2.3). 正确URL(测试环境): http://oa.com/index.php/admin/publi ...
- ThinkPHP通过类的链式继承优化空操作的实现
上篇<ThinkPHP空操作和空控制器的处理>中,在处理空操作时修改了父类Controller.class.php中代码,不到万不得已不能 修改基类控制器中的原码,此时可在子类与父类之间, ...
- 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组
真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...
- Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)
原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问 ...
- thinkPHP 空模块和空操作、前置操作和后置操作 详细介绍(十四)
原文:thinkPHP 空模块和空操作.前置操作和后置操作 详细介绍(十四) 本章节:介绍 TP 空模块和空操作.前置操作和后置操作 详细介绍 一.空模块和空操作 1.空操作 function _em ...
随机推荐
- Scrapy研究和探索(七)——如何防止被ban大集合策略
说来设置的尝试download_delay少于1,不管对方是什么,以防止ban策略后.我终于成功ban该. 大约scrapy利用能看到以前的文章: http://blog.csdn.net/u0121 ...
- 基于Jquery的多彩二维码的生成
Demo效果图: 源代码: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name=&quo ...
- Samza/KafkaAnalysizing
Apache Samza is a distributed stream processing framework. It uses Apache Kafka for messaging, and A ...
- E: 无法获取锁 /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)解决方法
/********************************************************************* * Author : Samson * Date ...
- UITableView Cell 弹簧动画效果
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath ...
- SoC嵌入式软件架构设计II:否MMU的CPU虚拟内存管理的设计与实现方法
大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其他代码.我们PC然在同一时间大量的应用,能够整个线性地址空间(除了部分留给操作系统或者预留它用),能够觉得每一个应用程序 ...
- windows下exfat无法写入修复
为了可以实现mac与windows文件共享,把移动硬盘格式化为exfat了,但是在osx中放入文件后,在windows上紧进行读取写入时出现错误,提示使用chkdsk进行修正,以下是修正步骤. ①wi ...
- java设计模式之一工厂模式
简单工厂模式是java设计模式中最简单的设计模式之一: 工厂模式是最常用的设计模式之一. 工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模 ...
- Oracle SQL in 超过1000 的解决方案
处理 Oracle SQL in 超过1000 的解决方案 处理oracle sql 语句in子句中(where id in (1, 2, ..., 1000, 1001)),如果子句中超过1000项 ...
- 第1章3节《MonkeyRunner源码剖析》概述:架构(原创)
天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...