zoukankan      html  css  js  c++  java
  • ThinkPHP---thinkphp控制器、路由、分组设置(C)

    配置文件分3类:系统配置文件,分组配置文件,应用配置文件

    ①系统配置文件ThinkPHP/Conf/convention.php;

    ②分组 / 模块 /平台配置文件Home/Conf/config.php;

    ③应用配置文件Common/Conf/config.php;

    【一】控制器

    (1)控制器的创建

    作用:负责用户输入及命令的调用

    ①命名规范:控制器名(Index,英文,首字母大写)+controller关键词+class.php

    例如:创建商品控制器GoodsControllerclass.php,用户控制器UserControllerclass.php

    案例:在Home分组中创建一个用户控制器User控制器

    (2)控制器结构代码

    ①声明当前控制器(类)命令空间

    //命名空间
    namespace HomeController;

    拓展

               1. 命名空间最早出现在PHP5.3.0版本。所以即使使用PHP3.2.3版本,在入口文件也要求你的版本环境大于5.3.0

    // 应用入口文件
    // 检测PHP环境
    if(version_compare(PHP_VERSION,'5.3.0','<'))  die('require PHP > 5.3.0 !');

             2. 命名空间本身跟目录没有关系,但声明和使用则必须和目录挂钩,这是thinkphp要求。即去哪里找对应目录

    ②引入父类控制器(类)

    //引入父类控制器
    use ThinkController;

    ③声明控制器(类)并继承父类

    //声明控制器(类)并继承父类
    class IndexController extends Controller {
        public function index(){
            
        }
    }

     案例参考上述代码,完善User控制器

    <?php
        //定义命名空间namespace
        namespace HomeController;
        //引入父类控制器
        use ThinkController;
        //定义控制器,继承父类
        class UserController extends Controller{
            
        } 
    ?>

    接下来在类里,编写测试方法test:

    //定义测试方法,public修饰词(private,protected,static,public)
    //修饰词(1)public公共的可以内外调用;(2)private私有的只能内部调用;(3)protected有继承关系的调用;(4)static静态的
    public function test(){
          phpinfo();
    }

    然后调用控制器显示结果:localhost/?m=Home&c=User&a=test

    如果后期需要更多的控制器来实现功能,则只需要按照上述创建步骤反复创建更多需要控制器即可①命名规范;②控制器的继承和声明;③方法

    (3)控制器中的跳转

    ①url组装(ThinkPHP里俗称U方法),对于配置文件里路由形式的配置值,不影响地址栏中输入其他形式路由访问。该配置项的值,影响的是ThinkPHP系统封装的URL组装函

    数(U函数)生成url地址的形式

    验证:将配置文件convention.php中URL_MODEL改为0,在控制其中用U方法输出当前控制器下方法路径,结果为

    /index.php?m=Admin&c=index&a=index&name=tony&age=23

    而正常默认pathinfo形式下的输出为

    /index.php/Admin/index/index/name/tony/age/23.html

    ②Tp中的跳转

     详解:

     1. url组装

    就是根据某种规则组成一个url地址,这个功能就叫组装。

    在ThinkPHP里,系统提供了一个封装的函数来处理url的组装,俗称U方法。

    U方法是系统提供的快速方法,除此外还有A,B,C,D,E,F,G,IM,R,S,U等快速方法。这些方法都定义在系统的函数库文件(ThinkPHP/Common/functions.php)里

    /**
     * URL组装 支持不同URL模式
     * @param string $url URL表达式,格式:'[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...'
     * @param string|array $vars 传入的参数,支持数组和字符串
     * @param string|boolean $suffix 伪静态后缀,默认为true表示获取配置值
     * @param boolean $domain 是否显示域名
     * @return string
     */
    function U($url='',$vars='',$suffix=true,$domain=false) {...}

    U方法语法:①U('url路径',参数数组可选);②指定控制器下的指定方法,例U('Index/index')

    例如:使用U方法组装出当前控制器下index方法的地址,U('index')

    Test控制器:

    <?php
        namespace Admincontroller;
        use ThinkController;
        class TestController extends Controller{
            public function test(){
                echo U('index');//输出/index.php/Admin/Test/index.html
            }
        }
    ?>
    <meta charset="utf-8">

     加上数组参数,例echo U('index/index',array('name' => 'tony','age' => '23'));

    <?php
        namespace Admincontroller;
        use ThinkController;
        class TestController extends Controller{
            public function test(){
                echo U('index/index',array('name' => 'tony','age' => '23'));//输出/index.php/Admin/index/index/name/tony/age/23.html
            }
        }
    ?>

     总结:

    通用语法格式:U('分组名/控制器名/方法名',array('参数名1'=>参数值1,'参数名2'=>参数值2....))

     2. Tp系统中的跳转

    在ThinkPHP中有两种跳转方法:成功跳转、失败跳转,在控制器中执行跳转

    成功跳转:$this->success(跳转提示信息,跳转地址--可选,等待时间--可选);

                      没有指定跳转地址,则跳转到上一页

    <?php
        namespace Admincontroller;
        use ThinkController;
        class TestController extends Controller{
            public function test1(){
                echo U('index/index',array('name' => 'tony','age' => '23'));
            }
            public function test2(){
                //成功跳转,地址为test1,即当前控制器下的test1方法
                $this->success('操作成功',U('test1'),5);
            }

    失败跳转:$this->error();

          语法与成功跳转相同,对上述进行修改

    public function test2(){
          //失败跳转,地址为test1,即当前控制器下的test1方法
          $this->error('操作失败',U('test1'),5);
    }

    总结:控制器的跳转成功和失败方法,继承自Think的controller.class.php控制器

    /**
         * 操作错误跳转的快捷方法
         * @access protected
         * @param string $message 错误信息
         * @param string $jumpUrl 页面跳转地址
         * @param mixed $ajax 是否为Ajax方式 当数字时指定跳转时间
         * @return void
         */
        protected function error($message='',$jumpUrl='',$ajax=false) {
            $this->dispatchJump($message,0,$jumpUrl,$ajax);
        }
    
        /**
         * 操作成功跳转的快捷方法
         * @access protected
         * @param string $message 提示信息
         * @param string $jumpUrl 页面跳转地址
         * @param mixed $ajax 是否为Ajax方式 当数字时指定跳转时间
         * @return void
         */
        protected function success($message='',$jumpUrl='',$ajax=false) {
            $this->dispatchJump($message,1,$jumpUrl,$ajax);
        }

    【二】路由

    路由:访问项目中具体某个方法的URL地址,简单理解就是URL地址

    在ThinkPHP里系统提供了4种路由形式(之前的路由形式:index.php?p=平台&c=控制器&a=方法;pca)

    总结:pca为平台、控制器、方法;thinkPHP里mca为分组、控制器、方法

    ①普通形式路由;

    ②Pathinfo形式路由;

    ③Rewrite形式路由;

    ④兼容形式路由

    下面详解

    (1)普通形式路由

    也叫get形式路由,所有信息通过get传递

    路由形式:http://网址/入口文件(index.php)?m=分组&c=控制器名&a=方法&参数名=参数值

    例如:访问Home分组下的User控制器中的test方法,并传递一个参数id=1

    http://www.1336.com/index.php?m=Home&c=User&a=test&id=1

    可以通过$_GET['id']来验证,输出1。所以验证成功

    缺点:url传递的东西都会显示出来,既不安全也不好看。所以用的不多

    (2)pathinfo()形式路由(thinkPHP的默认路由

    路由形式:http://网址/入口文件(index.php)/分组名/控制器名/方法/参数名1/参数值1/参数名n/参数值n

    http://www.1336.com/index.php/Home/User/test/id/100

    方法里有$_GET['id'],输出100。所以验证成功

    (3)rewrite路由形式(重写)

    路由形式:http://网址/分组名/控制器名/方法名/参数1/参数值1/参数n/参数值n

    与thinkPHP默认的路由形式Pathinfo()形式路由的不同之处就是,缺少了入口文件

    注意:该路由形式不能直接使用,需要配置完成才能使用

    配置步骤:

                 1. 配置Apache下的httpd.conf,开启扩展rewrite重写模块;

                 2. 修改虚拟主机配置文件,文件位于Apache目录下,conf/extra/httpd-vhosts,加上允许重写配置。表示允许重写当前站点

                简单说就是给需要开启重写的站点,目录配置处添加Allowoverride:all

    #针对目录的详细配置
        <Directory>
            #允许所有访问
            allow from all
            #允许重写
            AllowOverride all
            #表示允许站点显示文件目录结构
            Options +indexes
        </Directory>

               3. 重启Apache

               4. 将ThinkPHP压缩包中的.htaccess文件复制到入口文件的同级目录

    配置完成后输入网址验证,这里还用上面pathinfo的网址,去掉入口文件后刷新,发现输出100。OK~配置完成

    拓展:

    PHP的运行模式(5大运行模式):CGI模式(通用网关接口);FastCGI模式(常驻型CGI);CLI(命令行运行);Web模块模式(Apache等Web服务器运行的模式);ISAPI模式(5.3版本后不再支持)

    现在用的环境集成包的模式为Web模块模式,工作开发中常用FastCGI常驻型模式

    综上,rewrite模式需要Apache支持,一般不推荐使用。除了Apache外服务器软件还有nginx,lightd等。

    (4)兼容路由形式

    兼容路由形式结合了普通路由形式、pathinfo路由形式、rewrite路由形式特征

    路由形式:http://网址/入口文件?s=/分组名/控制器名/方法名/参数1/参数值1

    注意:兼容路由形式只有1个参数:参数名s,后面可以看做s参数值

    例如:http://www.1336.com/index.php?s=/Home/User/test/id/100,验证输出100,说明访问成功

    (5)拓展:ThinkPHP中路由形式的配置

         配置文件ThinkPHP/Conf/convention.php,ThinkPHP惯例配置文件

    /* URL设置 */
    'URL_CASE_INSENSITIVE'  =>  true,   // 默认false 表示URL区分大小写 true则表示不区分大小写
    'URL_MODEL'             =>  1,       // URL访问模式,可选参数0、1、2、3,代表以下四种模式:
    // 0 (普通模式); 1 (Pathinfo 模式); 2 (REWRITE  模式); 3 (兼容模式)  默认为Pathinfo 模式

    注意:路由形式的配置值,不影响地址栏中输入其他形式路由访问。该配置项的值,影响的是ThinkPHP系统封装的URL组装函数(U函数)生成url地址的形式

    【三】分组 / 平台

    分组:一般项目会根据某个功能的使用对象(用户/管理员管理后台)来区分代码,放到文件夹里,该文件夹即为分组文件夹。

    例如Application下Home给前台看,Admin给后台管理员看

    分组就是通常所指的平台,前台和后台。

    刚部署好的ThinkPHP系统中Home目录为分组目录(前台目录),后期如果需要更多的分组,需要自己去创建

    (1)如何创建分组?

    参考Home分组的目录结构即可,

    ①设置与Home同级文件;

    ②参考Home创建目录结构

    (2)访问?

    分组创建好后,可以在Admin分组里编写一个控制器,然后编写方法进行测试

    ①创建控制器:控制器名(Index,英文,首字母大写)+controller关键词+class.php

    ②编写控制器:

    <?php
        //定义命名空间namespace
        namespace AdminController;
        //引入父类控制器
        use ThinkController;
        //声明并继承父类控制器
        class AdminController extends Controller{
            echo "管理员控制器";
        } 
    ?>

    ③测试访问:

    普通形式路由:http://www.1336.com/index.php?m=Admin&c=Test&a=test

    默认形式pathinfo路由:http://www.1336.com/index.php/Admin/Test/test

    输出管理员控制器,即验证成功

  • 相关阅读:
    int,long int,short int所占字节
    NSArray Sort
    Foundation Kit
    界面构建
    主题存放问题
    ObjectiveC中委托和协议
    IOS中编码转换方法(转)
    螺旋队列
    如何在多台机器上共享IOS证书
    Xcode 中使用Github
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/8637061.html
Copyright © 2011-2022 走看看