前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Thinkphp5.0快速入门笔记(2)

Thinkphp5.0快速入门笔记(2)

作者头像
嘘、小点声
发布2019-08-06 16:04:17
4740
发布2019-08-06 16:04:17
举报
文章被收录于专栏:嘘、小点声嘘、小点声

学习来源与说明

https://www.kancloud.cn/thinkphp/thinkphp5_quickstart

测试与部署均在windows10下进行学习。

示例建立新的模块和控制器

在application模块下,建立新的模块,取名为new_controller,则建立新的文件夹,取名new_controller,然后在之下建立文件夹controller,模块在controller之下创建,建立模块blog,则创建Blog.php如图所示。

Blog.php中的内容如下:

代码语言:javascript
复制
<?php
namespace app\new_controller\controller;
class Blog
{
    public function get($id=10)
    {
        return '查看id=' . $id . '的内容';
    }
    public function read($name)
    {
        return '查看name=' . $name . '的内容';
    }
    public function archive($year, $month)
    {
        return '查看' . $year . '/' . $month . '的归档内容';
    }
}

其中的namespace app\new_controller\controller中,new_controller和创建的模块(目录)一致,

其中的class Blog中,Blog控制器和创建的文件Blog.php一致。

控制器中可访问的方法即为public function部分。

ThinkPHP的URL访问

URL访问的完整路径为:

http://serverName/index.php/模块/控制器/操作

例如访问:http://127.0.0.1/index.php/new_controller/blog/get/id/4(和上一段中的配置有关系)

另外说明:控制器和操作名不区分大小写。如:http://127.0.0.1/index.php/new_controller/BLOG/GET/Id是合法的。

可设置:如果希望严格区分大小写访问。// 关闭URL自动转换(支持驼峰访问控制器)'url_convert' => false(application中的config.php)

URL传递参数

访问:http://127.0.0.1/index.php/new_controller/blog/get/id/4

对应到了new_controller模块,blog控制器,get方法,id参数设置为4进行传递。

效果如下:(不传递参数默认id10传递)

访问:http://127.0.0.1/index.php/new_controller/blog/archive/year/2019/month/12两个参数传递。

当设置application下的config.php文件中的约92行处的url_param_type为1,则参数传递变为:http://127.0.0.1/index.php/new_controller/BLOG/Archive/2019/12。

效果如下:

隐藏URL中的index.php

原始地址为:http://serverName/index.php/模块/控制器/操作。这里的index.php是指代根目录中public下的index.php文件,其内容指定了application路径

隐藏index.php是否需要,可以先试试直接去掉index.php,如:http://127.0.0.1/new_controller/blog/archive/year/2019/month/12,访问成功则OK。

而入门教程中认为:在apache中,需要.htaccess 文件下写入以下代码完成:(其它的类型的都在教程里了)

代码语言:javascript
复制
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

URL路由缩减

在application下的route.php定义了路由信息,如修改其为如下:

代码语言:javascript
复制
<?php
return [
    '__pattern__' => [
        'name' => '\w+',
    ],
    '[hello]'     => [
        ':id'   => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
        ':name' => ['index/hello', ['method' => 'post']],
    ],
    'blog/:id' => 'new_controller/blog/get/',
];

即增加了一行路由信息,那么访问:http://127.0.0.1/blog/123,即等价于访问:http://127.0.0.1/new_controller/blog/get/id/123。效果如下:

更改以上代码中第10行为:

代码语言:javascript
复制
    'blog/[:id]' => 'new_controller/blog/get/',

则id参数的传递可以成为可选,则访问地址http://127.0.0.1/blog/正常输出不报错,否则报错。

针对index模块(以上都在说new_controller模块),则路由中可以省略为:

代码语言:javascript
复制
'blog/[:id]' => '/blog/get/',

默认index模块,直接写了控制器。index/blog/get/

路由规则

如:'hello/[:name]' => ['index/hello', ['method' => 'get', 'ext' => 'html']],

定义了路由规则限制了必须是get 请求,而且后缀必须是html 的,

路由简化

相同的部分路由可以简化,如以下路由信息:

代码语言:javascript
复制
'[blog]' => [
':year/:month' => ['blog/archive', ['method' => 'get'], ['year' => '\d{4}', 'month' => '\d{2}']],
':id' => ['blog/get', ['method' => 'get'], ['id' => '\d+']],
':name' => ['blog/read', ['method' => 'get'], ['name' => '\w+']],
],

可以简化为:

代码语言:javascript
复制
'[blog]' => [
':year/:month' => ['blog/archive', ['method' => 'get'], ['year' => '\d{4}', 'month' => '\d{2}']],
':id' => ['blog/get', ['method' => 'get'], ['id' => '\d+']],
':name' => ['blog/read', ['method' => 'get'], ['name' => '\w+']],
],

其它

在__pattern__ 中定义的变量规则我们称之为全局变量规则,

同时定义了全局规则和局部规则的话,当前的局部规则会覆盖全局规则

剩余复杂路由见说明书。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 学习来源与说明
  • 示例建立新的模块和控制器
  • ThinkPHP的URL访问
  • URL传递参数
  • 隐藏URL中的index.php
  • URL路由缩减
    • 路由规则
      • 路由简化
        • 其它
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档