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'
    )

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/PHP/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索问题
, 文件
, thinkphp
, 路由
, 配置
关于
thinkphp url简化、线简化算法的程序实现、thinkphp 路由、thinkphp路由配置、thinkphp 路由规则,以便于您获取更多的相关知识。

时间: 2024-09-18 14:30:40

thinkphp空操作和配置文件实现简化路由的相关文章

Thinkphp 空操作、空控制器、命名空间(详解)

1.空操作 空操作是指系统在找不到请求的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化. http://网址/index.php/Home/Main/login http://网址/index.php/Home/Main/hello 空操作 出现页面: 显示的错误信息过于详细,为安全以及优化页面起见,实行空操作 1.做一个_empty()方法.要在子类里面写,不要再父类里(推荐使用) function _empty() { echo

Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)

原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问这个类不存在的方法,那么它会去访问"魔术方法__call()" 用户访问一个不存在的操作->解决:给每个控制器都定义个_empty()方法来处理   第二个解决方法:定义一个空操作 [空模块处理] 我们使用一个类,但是现在这个类还没有被include进来. 我们可以通过自动加载机制处

ThinkPHP空模块和空操作详解_php实例

ThinkPHP的空模块和空操作也是很有实用意义的功能,空模块的概念就是当ThinkPHP找不到指定模块的时候,它会尝试去定位空模块(EmptyAction),执行空模块里面的index操作.同理,空操作也是同样的概念,当系统找不到指定模块下的操作方法的时候,就会尝试去定位空操作方法(empty).其实很好理解,就有点类似php虚拟主机里面的自定义404页面,但它比自定义404更加灵活,利用这个机制,我们可以实现错误页面和一些URL的优化,下面分别详细介绍下空模块和空操作的写法. 1.空模块,在

thinkPHP 空模块和空操作、前置操作和后置操作 详细介绍(十四)

原文:thinkPHP 空模块和空操作.前置操作和后置操作 详细介绍(十四) 本章节:介绍 TP 空模块和空操作.前置操作和后置操作 详细介绍 一.空模块和空操作1.空操作function _empty($name){$this->show("$name 不存在 <a href='__APP__/Index/index'>返回首页</a>");}2.空模块(EmptyAction.class.php的文件)class EmptyAction extends

thinkphp学习笔记10—看不懂的路由规则

原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂.   1.路由定义 要使用路由功能需要支持PATH_INFO,PATH_INFO是什么呢?手册中提到"要使用路由功能,前提是你的URL支持PATH_INFO(或者兼容URL模式也可以,采用普通URL模式的情况下不支持路由功能)," , url支持path_info,不是apache要支持path_info么,度娘讲的还算清楚一点,见下文: p

thinkphp连贯操作实例分析_php实例

本文实例分析了thinkphp连贯操作用法.分享给大家供大家参考.具体分析如下: 一.常用连贯操作,可以接连使用但没前后顺序之分,后面一定要有方法select,updata,delete,find 1.where:帮助我们设置查询条件 2.order:对结果进行排序 复制代码 代码如下: $arr=$m->order('id desc')->select();//字符串方法,默认是asc升序排列,加desc改为降序排列  $arr=$m->order(array('id'=>'de

vivo Xplay3S手机隔空操作怎么打开?隔空操作开启方法

1)在手机中点击桌面的 设置,之后我们再利用手指按住屏幕向上拉动,如图所示你会看到有一个[智能体感].(如下图)   2)现在我们进入到体感中会看到有一个[隔空操作],现在我们点击进入把它打开.(如下图)   当然打开隔空操作操作之后我们可以选择那些来实现 隔空操作操作了,就是如上图可以一个个选择操作哦.

PHP中操作ini配置文件的方法_php实例

PHP操作ini配置文件 复制代码 代码如下: <?php//写ini文件function write_ini_file($assoc_arr, $path, $has_sections=FALSE){    $content = "";    if ($has_sections)    {        foreach ($assoc_arr as $key=>$elem)        {            $content .= "[".$ke

java操作properties配置文件

Java中有个类Properties(Java.util.Properties),主要用于读取Java的配置文件,将一些可能需要变化的值存放在properties中进行配置,通常为为.properties文件,其实就是普通的文本文件,文件的内容的格式是"键=值"的格式,文本注释信息可以用"#"来注释.尽量使用UTF-8格式存储.jdk自身提供的类有缺点,所以我们通常使用 commons-configuration框架进行解析. 1.1.1. Properties类图