zoukankan      html  css  js  c++  java
  • 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(   //定义路由规则
            ':idd'=>'User/index'
        )
  • 相关阅读:
    汇编语言LAHF和SAHF指令
    JSONHelper
    【CSS】利用宽高比例的媒体查询
    swiftmailer时没有设置https的选项,才可以发送成功。在linux下面
    DevExpress
    IntelliJ IDEA2017 激活方法 最新的激活注册方式方法,破解,密钥
    vue.js 列表追加项写法
    RedisCache 缓存
    时间通用类 datetime
    LogHelper 日志
  • 原文地址:https://www.cnblogs.com/kongxs/p/3452294.html
Copyright © 2011-2022 走看看