• thinkphp学习笔记


    1.在网站根目录下,进入cmd,使用命令: php think build user #在app目录下创建了user目录
    增加应用入口:
    所有的应用入口文件都放在public目录
    多应用使用不同的入口的情况下,每个入口文件的内容都是一样的,默认入口文件名(不含后缀)就是应用名。
    如果想让入口文件名和应用名不一样,则要更改入口文件内容:

    2.url重写:打开httpd.conf文件,开启mod_rewrite.so模块,找到AllowOverride None把None改为All
    3.默认安装后的根目录有一个.example.env环境变量示例文件,可以直接改成.env文件,默认打开了调试模式。关闭调试模式:打开.env文件,把APP_DEBUG = true改成APP_DEBUG = false
    3.使用halt()进行中断测试

    route(路由)的详解
    路由在框架中的作用打个比方的话,路由好比是WEB应用的总调度室,对于访问的URL地址,路由可以拒绝或者接受某个URL请求,并进行分发调度,而且还有一个副作用是因为路由规则可以随意定义,因此可以让你的URL请求地址更优雅,因为不会暴露实际的URL地址,也就意味着更安全,5.0的路由不仅仅只是支持路由到控制器的操作方法,甚至可以路由到任何的类或者闭包。

    1.路由模式

    路由可以理解为一种寻径功能模块,比如URL地址里面的index模块怎么才能省略呢,默认的URL地址显得有点长,下面就来说说如何通过路由简化URL访问。ThinkPHP5.0的路由比较灵活,并且不需要强制定义,可以总结归纳为如下三种方式:

    1.1、普通模式

    关闭路由,完全使用默认的PATH_INFO方式URL:

      'url_route_on'  =>  false,
    

    路由关闭后,不会解析任何路由规则,采用默认的PATH_INFO 模式访问URL:

    http://serverName/index.php/module/controller/action/param/value/...
    但仍然可以通过操作方法的参数绑定、空控制器和空操作等特性实现URL地址的简化。

    可以设置url_param_type配置参数来改变pathinfo模式下面的参数获取方式,默认是按名称成对解析,支持按照顺序解析变量,只需要更改为:

    // 按照顺序解析变量
    'url_param_type' => 1,
    1.2、混合模式

    开启路由,并使用路由定义+默认PATH_INFO方式的混合:

      'url_route_on' => true,
      'url_route_must'=> false,
    

    该方式下面,只需要对需要定义路由规则的访问地址定义路由规则,其它的仍然按照第一种普通模式的PATH_INFO模式访问URL。

    1.3、强制模式

    开启路由,并设置必须定义路由才能访问:

      'url_route_on'          =>  true,
      'url_route_must'        =>  true,
    

    这种方式下面必须严格给每一个访问地址定义路由规则(包括首页),否则将抛出异常。

    首页的路由规则采用/定义即可,例如下面把网站首页路由输出Hello,world!

    Route::get('/',function(){
        return 'Hello,world!';
    });
    

    2、路由配置
    2.1、URL请求的执行流程:用户请求 -> 路由解析 -> 调度请求 -> 执行操作 -> 响应输出

    2.2、路由规则写在哪里:

      * 路由规则写在与应用配置统计的route.php文件中

      * 路由规则主要使用路由类Route::rule()方法注册

    2.3、设置路由配置文件列表:

      'route_config_file'    =>    ['home','admin'],
    

    application/home.php配置home模块的路由规则,application/admin.php则配置admin模块的路由规则。

    虽然运行的时候依然会同时加载并注册,但定义的时候是明确分开了,便于协作。

    3、路由注册

    路由注册可以采用方法动态单个和批量注册,也可以直接定义路由定义文件的方式进行集中注册。

    3.1、动态注册和静态路由

    现在给该URL地址定义一个新的路由规则如下:

      Route::rule('hello/:name','index/Index/hello');
    

    现在我们来分析下rule方法的参数,第一个参数称为路由规则(通过路由访问的地址),第二个参数为该规则对应的路由地址(也就是原来定义路由之前访问的URL地址)。

    路由规则通常可以包含变量(例如其中的:name就是一个路由变量),路由规则中包含变量(包括可选变量)的就称该条路由规则为动态路由,没有包含任何变量的路由我们称之为静态路由,例如:

    // 静态路由规则
    Route::rule('hello','index/Index/hello');
    // 动态路由规则
    Route::rule('hello/:name','index/Index/hello');
    注:ThinkPHP5.0的路由规则定义是从根目录开始,而不是基于模块名的。并且原来的访问地址会自动失效。

    3.2、URL请求类型

    我们知道一个URL请求类型有很多,常用的包括GET/ POST/ PUT/ DELETE等,我们使用rule方法注册的路由,默认是支持任意请求类型访问的,不过你可以通过第三个参数来限定请求类型:

      Route::rule('hello/:name','index/index/hello','GET');
    

    注:只有通过GET请求的访问,该路由才会生效。不指定的话默认为任何请求类型

    如果你希望路由可以支持所有的请求类型,也可以使用:

      Route::any('hello/:name','index/index/hello');
    

    注:any方法其实和rule方法是一样的,区别在于不用写第三个参数。

    系统提供了为不同的请求类型定义路由规则的简化方法,例如:

      Route::get('new/:id','News/read'); // 定义GET请求路由规则
      Route::post('new/:id','News/update'); // 定义POST请求路由规则
      Route::put('new/:id','News/update'); // 定义PUT请求路由规则
      Route::delete('new/:id','News/delete'); // 定义DELETE请求路由规则
      Route::any('new/:id','News/read'); // 所有请求都支持的路由规则
    

    我们也可以批量注册路由规则,例如:

      Route::rule(['new/:id'=>'News/read','blog/:name'=>'Blog/detail']);
      Route::get(['new/:id'=>'News/read','blog/:name'=>'Blog/detail']);
      Route::post(['new/:id'=>'News/update','blog/:name'=>'Blog/detail']);
    

    4、路由表达式

    路由表达式统一使字符串定义,采用规则定义的方式。

    4.1、规则表达式

    规则表达式通常包含静态地址和动态地址,或者两种地址的结合,例如下面都属于有效的规则表达式:

      '/' => 'index', // 首页访问路由
      'my'        =>  'Member/myinfo', // 静态地址路由
      'blog/:id'  =>  'Blog/read', // 静态地址和动态地址结合
      'new/:year/:month/:day'=>'News/read', // 静态地址和动态地址结合
      ':user/:blog_id'=>'Blog/read',// 全动态地址
    

    每个参数中以“:”开头的参数都表示动态变量,并且会自动绑定到操作方法的对应参数。

    4.2、路由变量

    支持对路由参数的可选定义,例如:

      'blog/:year/[:month]'=>'Blog/archive',
    

    [:month]变量用[ ]包含起来后就表示该变量是路由匹配的可选变量。

    4.3、变量解析方式

    路由规则之外的变量解析方式一般是key1/value1/key2/value2解析为key1=value1,key2=value2,也就是说

    http://tp5.com/hello/thinkphp/city/shanghai
    除了会解析路由变量name之外,还会解析另外一个city变量,分别是:

      'name'    =>    'thinkphp',
      'city'    =>    'shanghai'
    

    当然我们可以设置按顺序解析:

      'url_param_type'    =>    1
    

    这个时候如果访问http://tp5.com/hello/thinkphp/city/shanghai,得到的变量结果就完全不同了:

      'name'    =>    'thinkphp',
      0    =>    'city',
      1    =>    'shanghai',
    

    4.4、定制分隔符

    我们在定义路由规则的时候,都是统一使用/作为URL分隔符,但并不是表示URL访问的时候只能使用/作为分隔符,例如我们可以设置参数:

      'pathinfo_depr'    =>    '-',
    

    那么URL访问地址就会变成

    http://tp5.com/hello-thinkphp
    http://tp5.com/hello-thinkphp-beijing
    如果你希望某个路由地址使用不同的URL分隔符,有两种方法:

    方法一:param_depr

    先介绍第一种比较简单的,定义路由规则的时候,添加param_depr参数(要求V5.0.2+),例如:

      Route::get('hello/:name/[:city]','index/index/hello',['param_depr' => '-'],[ 'name' => 'w+' , 'city' => '[A-Za-z]+' ]);
    

    表示只有在该路由规则访问的时候,才使用-作为url分隔符。

    方法二:组合变量

    在一些复杂的路由规则定义中,我们可以使用组合变量定义方式,组合变量的优势是变量分隔符可以随意定义,例如:

    复制代码
    //正确路径:http://www.mtp5.com/test/1;注:‘?《name?》’表示可选的,['index/index2/test', []]里面的‘[]’是必须的
    'test/<id?>-?<name?>' =>['index/index2/test', []]

    //正确路径:http://www.mtp5.com/test-1
    'test-<id>-?<name?>'  =>['index/index2/test', []]
    
    //正确路径:http://www.mtp5.com/test-1-
    'test-<id>-<name?>'  =>['index/index2/test', []]
    
    //正确路径:http://www.mtp5.com/test/1-
    'test/<id>-<name?>'  =>['index/index2/test', []]
    
    //正确路径:http://www.mtp5.com/test1
    'test?<id?>-?<name?>'  =>['index/index2/test', []]
    
    //正确路径:http://www.mtp5.com/test
    'test-?<id?>-?<name?>'  =>['index/index2/test', []]
    

    复制代码
    错误的写法:

    //错误写法
    'test/?<id?>-?<name?>' =>['index/index2/test', []]
    'test/[:id]-?<name?>' =>['index/index2/test', []]
    注:<name?>表示可选变量,'?<name?>'表示前面的分隔符和这个变量都是可选的

    通过本篇内容的学习,你已经掌握了路由变量的使用,下面是路由变量的对比

    变量定义 必须变量 可选变量 变量分隔符
    普通变量 :name [:name] /
    组合变量 <name?> 实际URL分隔符
    4.5、完整匹配

    规则匹配检测的时候只是对URL从头开始匹配,只要URL地址包含了定义的路由规则就会匹配成功,如果希望完全匹配,可以在路由表达式最后使用$符号,例如:

    //正确的写法
    'new/:cate('=> 'News/category',//路径:http://serverName/index.php/new/info 'hello/[:name])' => 'index/hello',
    //错误的写法
    'url/[:id]/[:name$]' => 'index/index2/url',

  • 相关阅读:
    Visio使用遇到的问题
    UML类图符号 各种关系说明以及举例
    测试人员与开发人员之间的关系如何?
    linux命令学习-复制(cp,scp)
    linux服务器报Too many open files的解决方法
    QTP学习一添加默认的注释及调用外部vbs文件
    关于JAVA应用中文字体显示小方框的问题解决
    web测试方法总结
    linux命令学习-su
    Oracle定义varchar2()类型存储汉字的长度问题
  • 原文地址:https://www.cnblogs.com/samRoot/p/13919599.html
Copyright © 2020-2023  润新知