thinkphp1路由控制器等设置

隐藏index.php
  • 打开apache重写模块
    在这里插入图片描述

  • 配置虚拟主机中允许重写
    在这里插入图片描述

  • 在入口文件中要有.htaccess文件
    在这里插入图片描述
    重启apache服务,让配置生效。访问时就可以不用带index.php文件了

路由

定义路由

路由文件的位置:项目目录/routes/route.php文件中进行如下格式的定义

Route::请求方式('路由表达式',匿名函数);
Route::请求方式('路由表达式','[@]模块名/控制器名/方法名');

=注:给控制器方法设置好了请求的路由规则后,原来的pathinfo请求则失效,请求就会报异常,只能通过自定义路由规则来请求=
在这里插入图片描述

路由配置

如果设置路由相关配置文件则必须严格给每一个访问地址定义路由规则(包括首页),否则将抛出异常

  • 配置强制路由,在config/app.php配置文件中设置
'url_route_must'		=>  true,
注:将开启强制使用路由,这种方式下面必须严格给每一个访问地址定义路由规则(包括首页),否则将抛出异常
  • 路由缓存
    对于路由规则较多的应用可以大幅提升路由性能(仅部署模式有效)
'route_check_cache'	=> true,
注:如果路由定义中,有某个路由规则的路由地址使用了闭包的方式,那么路由缓存将会失效。
  • 完全匹配
'route_complete_match'   => true,

在这里插入图片描述

路由请求类型
Route::get(); 		// 定义GET请求路由规则    查询
Route::post(); 	// 定义POST请求路由规则   添加
Route::put(); 	// 定义PUT请求路由规则    修改
Route::delete(); // 定义DELETE请求路由规则 删除
Route::any(); 		// 所有请求都支持的路由规则  框架提供 不推荐

代码示例

<?php
use think\facade\Route;

Route::get('/', function(){
    return "我是get请求";
}); 		// 定义GET请求路由规则    查询

Route::post('/',function(){
    return "我是post请求";
}); 	// 定义POST请求路由规则   添加

Route::put('/',function(){
    return "我是put请求";
}); 	// 定义PUT请求路由规则    修改

Route::delete('/',function(){
    return "我是delete请求";
}); // 定义DELETE请求路由规则 删除

Route::any('/',function(){
    return "我是any请求";
}); 		// 所有请求都支持的路由规则  框架提供 不推荐

postman测试请求
在这里插入图片描述

路由参数

定义格式

# 必填参数
Route::请求方式('路由表达式/:参数',匿名函数);
# 可选参数
Route::请求方式('路由表达式/[:参数]',匿名函数);

代码示例

use think\facade\Route;

/*

Route::get("test/:id",function($id){
    return "我的参数是:".$id;
});
//php7版本以上才有的标量限定(类型匹配),据说效率提高4倍
Route::get("test/:id",function(int $id){
    return "我的参数是:".$id;
});
//参数限制
Route::get("test/:id",function($id){
    return "我的参数是:".$id;
})->pattern(['id'=>'\d+']);

 */
//可选参数定义格式
Route::get("test/[:id]",function($id=10){
    return "我的参数是:".$id;
});

在这里插入图片描述

路由分组

路由分组功能允许把相同前缀的路由定义合并分组,这样可以简化路由定义,并且提高路由匹配的效率

路由分组定义格式

Route::group('分组名(字符串)或者分组路由参数(数组)','分组路由规则(数组或者闭包)');
<?php
use think\facade\Route;


// Route::group('admin',function(){
//     Route::get('login', function(){
//         return "登录";
//     });
//     Route::get('logout', function(){
//         return "退出";
//     });
// })->pattern(['id' => '\d+']);

//路由嵌套
Route::group(['method' => 'get'], function () {
    Route::group('admin',function(){
        Route::get('login', function(){
            return "登录";
        });
        Route::get(':id', function($id){
            return "退出".$id;
        });
    });
})->pattern(['id' => '\d+']);

在这里插入图片描述

控制器

控制器的后缀

打开配置文件config/app.php,有如下配置

'controller_suffix'      => false,
# 表示默认情况下,控制器无特殊后缀。例如 Index控制器,文件名为Index.php

如果需要进行设置,可以设置为

'controller_suffix'      => 'Controller',
# 表示控制器以Controller为后缀。例如Index控制器,文件名为IndexController.php

=一般不建议进行修改,保持默认,框架默认给我们的配置=
在这里插入图片描述

使用命令行创建分组

命令格式如下

php think build --module 分组名称

在这里插入图片描述

创建控制器

创建控制器两种方式

  • 手动创建
application/模块目录/controller/控制器类文件
命名规则:控制器名称(首字母大写) + (控制器后缀,默认没有) + .php
  • 命令行方式创建
php think make:controller --plain 模块名/控制器名
# 参数说明
--plain 标准控制器 (没有加此参数默认创建的控制器是一个资源控制器,所以一般加上此选项)

不加–plain
在这里插入图片描述
加上–plain
在这里插入图片描述
如果创建时,没有在模块名称,则默认创建到公共模块中 【common】
在这里插入图片描述

开启调试模式

  • 默认情况下,错误描述比较模糊,不方便进行错误调试。这种模式通常叫做“部署模式”。
    开发阶段可以将框架设置为调试模式,便于进行错误调试:
    修改项目目录 config/app.php文件
    在这里插入图片描述
    在这里插入图片描述

  • 实际开发中,使用第2种方案,在.gitignore同级目录下创建.env文件配置好调试环境,在线上忽略此文件就可以达到线上不用重新配置
    在这里插入图片描述

前置操作

可以为某个或者某些操作指定前置执行的操作方法,设置 beforeActionList属性可以指定某个方法为其他方法的前置操作,=数组键名为需要调用的前置方法名,无值的话为当前控制器下所有方法的前置方法=,因为前置操作方法调用在think\Controller类中,所以要继承它

<?php

namespace app\index\controller;

use think\Controller;

class Demo extends Controller
{
    //前置方法列表
    protected $beforeActionList=[
        //数组没有键值的话表示为当前控制器下所有方法都使用前置方法
        'beforeAc'=>['index'],
        //except键名表示这些方法不使用前置方法
        //'beforeAc'=>['except' => 'index3'],
        //only键名表示这些方法使用前置方法
        //'beforeAc'=>['only'=>'index']
    ];

    protected function beforeAc(){
        echo '我是前置方法<hr>';
    }

    public function index(){
        echo 'php是世界上最好的语言';
    }

    public function index2(){
        echo 'index2';
    }

    public function index3(){
        echo 'index3';
    }

}

页面跳转

系统的\think\Controller类内置了两个跳转方法success和error,用于页面跳转提示

代码示例

<?php
use think\facade\Route;
//定义控制器路由	模块/控制器类名/方法名	    路由别名
Route::get('test','index/Index/test')->name('testAlias');

在这里插入图片描述
此方法可根据不同的请求方式http标准请求还是ajax请求会自动返回数据(html/json)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值