【问题标题】:CodeIgniter 4 Dynamic RoutesCodeIgniter 4 动态路由
【发布时间】:2019-03-18 11:48:36
【问题描述】:

我是 CI 新手。 在我未来的项目中,我们会有这样的菜单结构:

Menu1
--Submenu1
--Submenu2
--[...]
Menu2
--Submenu3
--Submenu4
[...]

所以,有很多菜单,每个菜单都有很多子菜单(很多子菜单会有 CRUD 或类似的)。 我的问题是制作到所有这些页面的路由,我想在文件夹中组织控制器(使用菜单名称),每个子菜单都是一个控制器,如下所示:

/app/Controller/Menu1/Submenu1.php
/app/Controller/Menu1/Submenu2.php
/app/Controller/Menu2/Submenu1.php
etc...

然后我的观点会是这样的:

/app/Views/Menu1/Submenu1/index.php
/app/Views/Menu1/Submenu1/insert.php
etc...

但同时,我不想在 Routes.php 文件中为每个子菜单创建一个条目,有没有一种方法可以创建一个简单地采用路径 URI 并在文件夹中搜索该路径的路由价值观?

【问题讨论】:

  • 你应该先阅读这个stackoverflow.com/help/how-to-ask
  • @DanishAli 我没有明白你的意思,我已经阅读了 CI 文档和论坛。我不是要一堆代码,只是要如何路由控制器/视图,我在提出问题之前介绍了我的问题。
  • URL 字符串与其对应的控制器类/方法之间存在一对一的关系。所以我不明白你的意思......只需在你的数据库中定义一个列 url 来定义你的菜单,就是这样。
  • 我试图弄清楚如何使用 (:segment) 和 (:any) 来执行此路线,如下所示: $routes->get('/(:segment)/( :segment)/(:any)', '$1/$2::$3');

标签: codeigniter model-view-controller


【解决方案1】:

首先,请记住,您需要使代码易于管理。从外观上看,您的视图和控制器需要更加精简,否则将变得非常需要管理。

因此,我认为你最好做一些事情:

1) 在 application/core 中创建一个名为 MY_Controller.php 的控制器并从中扩展所有控制器(这样您就可以集中您的方法)

2) 使用每个菜单控制器。所以控制器 = Menu1 或 Menu2

3) 尽量保持您的视图可重复使用,以避免事情过于复杂

你应该得到这样的结果:

menu1/Submenu1 >> Controller (Menu1) >> function Submenu1

menu1/Submenu2 >> Controller (Menu1) >> function Submenu2

请记住,使用 Codeigniter 会导致以下网址:

url: menu1/submenu1/param1/param2

Controller
function submenu1($param1,$param2)

因此无需获取 URI 组件,因为 CI 会自动路由它们。

【讨论】:

  • 这几乎就是我一直在寻找的答案。我的问题是我的项目会有很多菜单和子菜单,所以我想将它们分成 Controllers 文件夹内的子文件夹。而且我不想在同一个控制器中编写许多“动作”(函数)(例如 menu1 存储子菜单 1、子菜单 2 等的所有功能)。我在 Routes 文件中尝试了这个:“ $routes->get('/menu1/submenu1', '\App\Controllers\Menu1\Submenu1::index'); ”。但访问 MY_IP/menu1/submenu1 时出现此错误 - 找不到控制器或其方法:{0}::{1}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-05
  • 1970-01-01
  • 2011-02-16
  • 2014-07-08
相关资源
最近更新 更多