账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    ThinkPHP5.1 路由匹配规则
    • 2020-01-01 00:00
    • 10
    26
    0

    问题描述

    如何才能让根路由'/'及其所有的子路由'/**'都指向同一个控制器

    问题出现的环境背景及自己尝试过哪些方法

    由于TP5会默认把 '/' 自动变成完整匹配
    所以Route::get('/', 'index')并不能匹配'/test'

    // 就算把`RuleGroup.php`文件内的这一段代码注释掉 仍然无法匹配子路由
    if ('/' === $rule || '' === $rule) {
        // 首页自动完整匹配
        $rule .= '$';
    }

    目前的做法是使用Route::get('/:_', 'index')来实现
    不过这样的做法会污染param

    // 匹配路由`/a/b/c/d/e`
    // 请求参数`param`:
    // [param] => Array
    //     (
    //         [_] => a,
    //         [b] => c,
    //         [d] => e
    //     )

    请问有没有更好的实现方式

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 在ThinkPHP5.1中,路由匹配规则可以通过Route::match()方法实现。这个方法返回一个数组,包含匹配的URL和控制器和方法。

      例如,如果你有一个URL/users,你可以通过以下方式定义路由:

      php Route::match(['get', 'post'], 'UserController@getUsers', function ($request, $response) { // 在这里处理请求和响应 });

      在这个例子中,getUsers是控制器的名称,post是方法的名称。当你发送GET请求到/users时,getUsers控制器将被调用,getUsers方法将被调用,然后返回一个包含用户信息的响应。

      在处理请求和响应时,你可以根据需要执行任何代码。例如,你可以检查请求的方法,或者检查请求的数据。

      请注意,Route::match()方法返回的数组必须是数组,否则它将失败。如果你尝试将数组转换为字符串,它将返回null

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部