CodeIgniter 4中如何访问子目录的控制器?
开发学院2022-04-06 08:46:43
我想要在CodeIgniter 4中访问子目录中的控制器,但是出于某种原因,我无法让它工作。
例如,这是一个URL:www.example.com/admin/dashboard
在控制器文件夹中,我创建了一个名为Admin的文件夹和一个名为Dashboard.php的文件。
我在Dashboard.php中使用了这段代码:
namespace App\Controllers; class Dashboard extends BaseController { public function index() { } }
我试着把类名改成AdminDashboard,Admin_Dashboard,几乎是每个逻辑名,但是每次我都得到一个404错误,提示如下:
Controller or its method is not found: App\Controllers\Admin\Dashboard::index
我知道文件本身已经成功加载,但是我认为我没有正确声明类名,它一直向我抛出那些404错误。
不幸的是,CI4的文档没有提供任何关于类名应该如何命名的信息...
更新#1
我设法通过改变一些事情来使它工作:
namespace App\Controllers\Admin; use CodeIgniter\Controller; class Dashboard extends Controller { public function index() { } }
但现在它不会扩展BaseController,它有一些我为我的应用程序构建的核心功能。
有什么想法可以让它扩展BaseController吗?
我必须承认,我还没有太多关于命名空间的知识,所以这可能是我犯错误的原因。
解决方案
正如我想象的那样,问题是我没有学会命名空间。我需要将使用线指向BaseController位置。
namespace App\Controllers\Admin; use App\Controllers\BaseController; class Dashboard extends BaseController { public function index() { } }
现在,www.example.com/admin/dashboard/像预期的那样,直接使用了那个指数函数。
其他方案
可能需要在Router.php中增加如下映射
$routes->add('/(.+?)_(.+?)/(.+?)$', 'subdir\\\\$1_$2::$3'); $routes->add('/(.+?)_(.+?)$', 'subdir\\\\$1_$2::index');
相关文章
- 功能强大的免费AI绘画工具:Stable Diffusion
- ChatGPT的中文平替:ChatGLM-6B
- 科普:为什么人工智能需要GPU而不是CPU?
- iis10安装URLRwrite组件
- 记一次cc攻击处理过程
- CodeIgniter4设置session变量为公共变量
- 在Codeigniter4中跟$this->db->last_query()功能一样的函数是什么?
- 如何为Spring Boot应用程序配置端口
- 安全狗Linux版命令行
- Codeigniter 4实体属性转换为未自动序列化的数组
- 在Codeigniter 4中使用分页时报错
- Mysql5.7创建用户并授权
- CodeIgniter 4设置会话变量$session=\\\\Config\\\\Services::session()为全局可用
- CodeIgniter4如何加载css和js文件?
- 如何调试Codeigniter 4项目?
- CodeIgniter 4中如何访问子目录的控制器?
- Whoops! We seem to have hit a snag. Please try again later
- 在CodeIgniter 4中redirect方法不能工作?
- 在CodeIgniter 4中,如何在保存到数据库后获取插入的id
- 如何在Codeigniter 4中删除url中的/index.php/?