zoukankan      html  css  js  c++  java
  • 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

    设置方法:

    1httpd.conf配置文件中加载了mod_rewrite.so模块

    2AllowOverride NoneNone改为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()











  • 相关阅读:
    java代码操作git实现仓库代码下载至指定目录
    深入学习Java核心 Java内存分配原理
    java使用@PostConstruct注解解决初始化class调用
    linux如何部署owasp-zap
    idea如何把自定义的jar打包至lib目录
    springboot搭建web项目(.html)
    高效学习排序算法
    JS实现双击编辑可修改状态
    linux安装redis集群+常见报错
    Erlang基本语法汇总
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3172189.html
Copyright © 2011-2022 走看看