zoukankan      html  css  js  c++  java
  • 根据地址栏参数的不同加载不同的页面

     想要实现上述功能,可以使用thinkPHP里面的空操作方法

    	//根据地址栏传递的参数来加载不同的html页面
    	//此处用到了空操作的方法
    	public function _empty($name){
    		$this->showevent($name);
    	}
    
    	public function showevent($name){
    		$this->display($name);
    	}

    thinkPHP3.2手册中已经写得非常明白了,可惜花了很久才明白

    空操作是指系统在找不到请求的操作方法的时候,会定位到空操作( _empty )方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。 
    
    例如,下面我们用空操作功能来实现一个城市切换的功能。 我们只需要给CityController类定义一个 _empty (空操作)方法:
    <?php
    namespace HomeController;
    use ThinkController;
    class CityController extends Controller{
            public function _empty($name){ 
                  //把所有城市的操作解析到city方法 
                  $this->city($name); 
           } 
      
           //注意 city方法 本身是 protected 方法 
           protected function city($name){ 
                 //和$name这个城市相关的处理 
                 echo '当前城市' . $name; 
           }
    }
    
    

    接下来,我们就可以在浏览器里面输入

    http://serverName/index.php/Home/City/beijing/
    http://serverName/index.php/Home/City/shanghai/
    http://serverName/index.php/Home/City/shenzhen/

    由于City控制器并没有定义beijing、shanghai或者shenzhen操作方法,因此系统会定位到空操作方法 _empty 中去解析,_empty方法的参数就是当前URL里面的操作名,因此会看到依次输出的结果是: 

    当前城市:beijing
    当前城市:shanghai
    当前城市:shenzhen

    注意:空操作方法仅在你的控制器类继承系统的ThinkController类才有效,否则需要自己定义 __call 来实现。  

    
    

     thinkPHP5的手册中也有相关说明

    空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。
     例如,下面我们用空操作功能来实现一个城市切换的功能。
    
    我们只需要给City控制器类定义一个_empty (空操作)方法:
    1.<?php
    2.namespace appindexcontroller;
    3.
    4.class City 
    5.{
    6.    public function _empty($name)
    7.    {
    8.        //把所有城市的操作解析到city方法
    9.        return $this->showCity($name);
    10.    }
    11.
    12.    //注意 showCity方法 本身是 protected 方法
    13.    protected function showCity($name)
    14.    {
    15.        //和$name这个城市相关的处理
    16.         return '当前城市' . $name;
    17.    }
    18.}

    接下来,我们就可以在浏览器里面输入

    
    
    1.http://serverName/index/city/beijing/
    2.http://serverName/index/city/shanghai/
    3.http://serverName/index/city/shenzhen/
    
    

    由于City并没有定义beijing、shanghai或者shenzhen操作方法,因此系统会定位到空操作方法 _empty中去解析,_empty方法的参数就是当前URL里面的操作名,因此会看到依次输出的结果是:

    1.当前城市:beijing
    2.当前城市:shanghai
    3.当前城市:shenzhen

    V5.0.2+开始,空操作方法不需要任何参数,如果要获取当前的操作方法名,直接调用当前请求对象来获取,你也可以使用依赖注入(参考请求章节的依赖注入)

     

     虽然现在PHP界鼓吹laravel,但是thinkPHP的功能也非常强大,能够完全利用好thinkPHP的框架就不错了。

    用原生的PHP语法来实现的话更加简单

  • 相关阅读:
    SpringCloud学习总结(九)——微服务架构高并发问题
    SpringCloud学习总结(八)——服务调用Feign
    SpringCloud学习总结(七)——服务注册中心Consul
    SpringCloud学习总结(六)——服务调用和负载均衡Ribbon
    Hadoop综合大作业
    分布式文件系统HDFS练习
    安装Hadoop
    爬虫综合大作业(震惊!爬取了590位微信好友后竟然发现了)
    爬取全部的校园新闻
    理解爬虫原理
  • 原文地址:https://www.cnblogs.com/SofuBlue/p/8675164.html
Copyright © 2011-2022 走看看