zoukankan      html  css  js  c++  java
  • 初识thinkphp(2)

    thinkphp的url路径的表示格式为

    http://ip/tp/public/index.php/模块/控制器/操作

    这里url最后的操作就是类里面的函数。

    0x01:url访问格式

    官方文档中有个驼峰的命名方法比如你实际目录名写的“HelloWorld”,但在解析的时候会成“helloworld”即默认转化为小写。

    针对这个问题,可以把url写成“../hello_world/”等价于HelloWorld即目录命名为驼峰的2个大写,也就是可以用“_”来达到访问大写字母的目的。

    这个例子的模块名字叫做demo

    这里插播一个方法,在application/config.php文件中

    // 开启调试模式
    'app_debug' =>  true;
    

    设置好后,即可出现详细的报错回显。

    首先创建模块,弹出命令窗口找到根目录tp/,并输入以下命令(我在根目录用shift+右键打开的cmd竟然不成功,不知道是不是cmd权限的问题)

    php think build --module demo
    

    并在controller文件下创建个HelloWorld.php文件,手写下代码,熟练下PHP的手感23333(自己写的时候,他老报错,最后发现<?(空格)php的问题,写代码敲空格排版的习惯竟然坑了我一次qwq)

    <?php
    namespace appdemocontroller;
    
    class HelloWorld
    {
        public function HelloWorld()
        {
            return "Hello World";
        }
        public function Hello()
        {
            return "Hello thinkphp";
        }
    }

    这里2个方法,我们调用一个吧

    这里发现了我下面HackBar的url明明写的HelloWorld,但是在报错的且明摆的写出了路径是..Helloworld,可以看出thinkphp将控制器的名字首字母大写(我试了将名字小写,他也会转化成大写,所以命名的时候要注意)。

    这里我url用的"hello_world"回显正确,说明_是来区分每个单词的,并且每个单词的首字母是被转化成大写的。

    还有一种办法,在applicationconfig.php中

    // 关闭URL自动转换(支持驼峰访问控制器)
    'url_convert' => false,

    这样就能不加“_”,也能愉快的访问我们的控制器组件了

    还有种方法可以访问控制器,即使用参数的模式

    0x02:参数传入

    先来修改下之前写的HelloWorld.php的源码,将我们的hello方法带个参

    <?php
    namespace appdemocontroller;
    
    class HelloWorld
    {
        public function helloWorld()
        {
            return "Hello World";
        }
        public function hello($name = 'yayayayaya')
        {
            return "Hello thinkphp ". $name;
        }
    }

    然后在url中输入

    http://192.168.60.132/tp/public/index.php?s=demo/hello_world/Hello

    默认参数回显

    然后在url中输入带参的url

    http://192.168.60.132/tp/public/index.php?s=demo/hello_world/Hello/name/miaomiaomiao

    回显

    用=来表示参数的值的输入

    http://192.168.60.132/tp/public/index.php/demo/hello_world/hello?name=miao

    回显

    这里我发现了个问题,在第三个示例中我把/index.php?s=demo/.. 改成了/index.php/demo/..

    原因是,我用 ?name=miao回显的内容竟然是默认参数的yayayayaya,而我删除默认参数的值,thinkphp就给我报错,报错信息为参数不存在。希望有大佬看到的话,能给点建议呀。

    0x03:缩短url

    此时此刻我们的url已经十分长了,有些不方便。

    首先缩短 ppublic这2个目录,即用Apache修改默认路径

    这时候修改Apache里conf目录下的vhost,本人是入门小白,不太清楚下面的url是什么作用,但是上面那个是我们要修改的。

    接下来是隐藏入口文件,这里我的入口文件是public下的index.php 之后的调用模块&控制器&参数

     还有个就是.htaccess这个文件,该文件在thinkphp的application目录下就有,本人是phpstudy的构架

    这代码做啥的,我不懂................但是结果是能隐藏的

    效果为:

    http://192.168.60.132/demo/hello_world/hello?name=miao

    并且能够正确访问~(但有个悲伤的事情是,phpmyadmin的目录和tp同级,这下一设置就访问不了phpmyadmin了,大概以后会解决)

    这时候的/demo/hello_world/是否也能隐藏呢?答案是肯定的。

    这里就要用到路由application oute.php这个配置文件了

    <?php
    // +----------------------------------------------------------------------
    // | ThinkPHP [ WE CAN DO IT JUST THINK ]
    // +----------------------------------------------------------------------
    // | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
    // +----------------------------------------------------------------------
    // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
    // +----------------------------------------------------------------------
    // | Author: liu21st <liu21st@gmail.com>
    // +----------------------------------------------------------------------
    
    return [
        '__pattern__' => [
            'name' => 'w+',
        ],
        '[hello]'     => [
            ':id'   => ['index/hello', ['method' => 'get'], ['id' => 'd+']],
            ':name' => ['index/hello', ['method' => 'post']],
        ],
        'hello/[:name]$' => 'demo/hello_world/hello',
    
    ];

    倒数第二行代码即使我们加上去的内容,前面的是thinkphp安装后原文件自带的,我们不管它。

    这里代码/[:name]$采用正则表达式,$限制了只能接name这一个参数,多了的参数即不合法url

    现在的效果为:

    http://192.168.60.132/hello?name=miao

    再者我们可以对我们的url后的helloworld控制器设置限制(可以起到一定的安全作用)

    'helloWorld/[:var]' => ['demo/hello_world/helloWorld',['method' => 'get', 'ext' => 'html' ]],

    这里定义的是请求必须是get,后缀是html(其实这个后缀不是真正的html),因为这里网页请求都是get,我后面改成post后便不可访问了。

                   

  • 相关阅读:
    Windows7如何让快速启动栏的资源管理器默认打开我的电脑(计算机)
    [转]C# Invoke和BeginInvoke的区别
    [转]RAID0、RAID1、RAID0+1、RAID5原理介绍
    【引用】Dashboard设计思路
    [Resolution]Your search cannot be completed because this site is not assigned to an indexer
    A Brief Introduction to Boolean Algebra(布尔代数简介)
    [转]从头开始安装Eclipse和VE
    [转]领导者如何问更好的问题
    如何使用花生壳(www.oray.com)实现动态域名映射(DDNS)
    如何手动删除Windows服务
  • 原文地址:https://www.cnblogs.com/sijidou/p/9162314.html
Copyright © 2011-2022 走看看