Php 在CodeIgniter中声明全局可见的数组以进行路由

Php 在CodeIgniter中声明全局可见的数组以进行路由,php,codeigniter,visibility,dry,Php,Codeigniter,Visibility,Dry,(对CodeIgniter和php来说是全新的,对编程来说并不陌生) 在CodeIgniter中,如何或在何处声明可在路由器(CI_路由器)、自定义控制器和视图加载器(CI_加载器)中访问的阵列?我希望避免在路由器中硬编码数据并多次指定相同的数据(在路由器、控制器和/或视图中) (解释如下;也许有更好的方法来做我想做的事情。) 我有一个发布免费软件应用程序的网站。该站点是静态的,但是手工维护简单的html是一场噩梦,所以我尝试使用CodeIgniter动态生成页面。除了“欢迎”或“联系信息”等一

(对CodeIgniter和php来说是全新的,对编程来说并不陌生)

在CodeIgniter中,如何或在何处声明可在路由器(CI_路由器)、自定义控制器和视图加载器(CI_加载器)中访问的阵列?我希望避免在路由器中硬编码数据并多次指定相同的数据(在路由器、控制器和/或视图中)

(解释如下;也许有更好的方法来做我想做的事情。)

我有一个发布免费软件应用程序的网站。该站点是静态的,但是手工维护简单的html是一场噩梦,所以我尝试使用CodeIgniter动态生成页面。除了“欢迎”或“联系信息”等一些松散的结尾之外,该网站的大部分都由高度结构化的应用程序部分组成。每个应用程序都有相同的页面集:关于、下载、屏幕截图等。这些页面都有相同的精确布局,只是内容不同

我主要关心的是可维护性以及添加新应用程序(或所有应用程序的新页面)所需的工作量。我认为没有理由使用多个控制器(甚至多个视图),因为唯一的区别在于数据(应用程序标识符),而不是行为或页面布局

我的问题是路由。我可以做类似的事情

$route['app1'] = 'main/apps/app1';
$route['app2'] = 'main/apps/app2';
…或循环应用程序标识符数组,但这似乎真的很糟糕。当我添加应用程序时,我不必修改路由器,因为它只是添加到列表中的另一个标识符,将用于从适当的文件中选择页面内容

我想做的是(伪代码):


这将处理对“app1/下载”或“app2/屏幕截图”等的所有请求。因此,我可以在哪里声明数组$list\u of_apps和$list\u of_pages,以便它们在路由器、控制器中以及以后的视图中可见?

这应该是一个简单的正则表达式解决方案:

// set this to whatever controller/method you want as the index for the app
$route['([^/])']      = 'main/apps/$1';

// this is a sample "subpage" handler
$route['([^/])/(.*)'] = 'main/index/$1/$2';

如果所有“应用程序”都遵循相同的URL结构,那么将其模块化应该不会太难。

我想我可以在控制器中解决这个问题,但这看起来很混乱,因为路由器存在,这就是它的任务所在。此外,该示例有点简化。我可能需要一个多维散列来保存站点的“地图”,而不是两个数组,其中节(应用程序)和页面(每个节内)的标识符将映射到包含实际数据的文件名以供显示。至少这似乎是一种合理的方式,可以处理特定应用没有“屏幕截图”页面或其他应用没有页面的情况。我明白了,但这会将所有内容路由到控制器,包括所有无效请求。我希望只路由有效请求(我识别的URI段)否则控制器仍然需要代码来确定URI对它是否有意义,那么为什么还要麻烦使用正则表达式呢“存储在数据库中?根据您的问题,我假设这些段没有映射到特定的控制器函数,那么如果不先检查数据库,您怎么知道该段是否有效呢?只是想更好地处理需求。。。
// set this to whatever controller/method you want as the index for the app
$route['([^/])']      = 'main/apps/$1';

// this is a sample "subpage" handler
$route['([^/])/(.*)'] = 'main/index/$1/$2';