前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >YII2 控制器中不能使用大写的问题

YII2 控制器中不能使用大写的问题

作者头像
句小芒
发布2022-12-29 18:13:41
3500
发布2022-12-29 18:13:41
举报

需求: 请求的接口为: getServerAddr

问题: 请求的地址只有一个,不符合 控制器名/方法名 的格式。

解决方案, 设置默认方法, public $defaultAction = "Index";

这样请求 /getServerAddr,实际请求的应该就是/getServerAddr/index

经过测试,报错 404, 检查发现是由于控制器的大小写引起的,只有请求地址为:get-server-addr 才会映射到 getServerAddrController 中,看了一下网上的解决方案, 大部分是去修改module.php 中的匹配规则。

代码语言:javascript
复制
	// 这是修改前的代码
    /*if (!preg_match('%^[a-z][a-z0-9\\-_]*$%', $className)) {
        return null;
    }*/
    // 这是修改后的代码
    if (!preg_match('%^[a-z][\w0-9\\-_]*$%', $className)) {
        return null;
    }

但是这样做会修改源码,所以不推荐使用这种方法。 正确的做法,修改配置文件添加url规则:

打开 web.php

代码语言:javascript
复制
'urlManager' => [
   'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        'getServerAddr' => 'get-server-addr/index'
    ],
],

加入这条匹配规则,这样就可以正常请求了。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档