【问题标题】:CodeIgniter routing with app ID's and entry ID's带有应用 ID 和条目 ID 的 CodeIgniter 路由
【发布时间】:2011-11-29 22:13:25
【问题描述】:
我是 CodeIgniter 的新手,我将使用它来构建一种具有多个应用程序实例的可重用应用程序。例如,应用程序的每个实例都会有一个 id “12345”,在该实例内部,将有 1、2、3、4、5、6、7、8 等条目 ID。
为此,我想我希望能够使用路由来设置类似的东西:
http://example.com/12345/Entry/Details/1
此 URI 将转到 ID=1 条目的详细信息页面,在应用程序 ID 12345 内。这将是与 /12346/Entry/Details/1 等 URL 不同的条目组。这是一个需要设置的路由规则吗?如果是这样,有人可以提供一个如何配置的示例,然后我将如何在函数内部使用 12345 和 1。非常感谢您的帮助,提前。
【问题讨论】:
-
-
它本质上是一个照片投票比赛,但我们希望能够多次重复使用它,所以我们创建了一个我认为我称之为“应用程序”的“比赛”,并且该比赛会有一个 ID .在每场比赛中,我们将投票的所有照片都有自己的 ID,例如:example.com{contestID}/{class}/{function}/{photoID}
标签:
php
model-view-controller
codeigniter
routing
codeigniter-2
【解决方案1】:
我的建议是您像这样路由您的网址:
$route['(:any)/{controller_name}/(:any)/(:any)'] = '{controller_name}/$2/$3/$1';
因此函数的最后一个参数始终是应用程序的 id (12345/12346)。这样做意味着您的 Entry 控制器函数将如下所示:
class Entry extends CI_Controller
{
function Details(var1, var2, ..., varn, app_id){}
function Someother_Function (var 1, app_id){}
}
您还需要为除了 app_id 之外没有任何内容的函数添加路由:
$route['(:any)/{controller_name}/(:any)'] = '{controller_name}/$2/$1'; //This may work for everything.
我希望这就是我们要问的...
编辑:
如果您只打算使用数字,则可以使用 (:num) 而不是 (:any)
【解决方案2】:
您可以通过将此规则添加到application/config/routes.php 文件中来实现这样的路由:
$route['default_controller'] = "yourdefaultcontroller";
$route['404_ovverride'] = "";
// custom route down here:
$route['(:num)/entry/details/(:num)'] = "entry/details/$1/$2",
当然假设您的 URI 与示例类似。
在您的控制器“Entry”中,您将有一个方法“details”,它采用 2 个参数,$contestID 和 $photoID,其中 $contestID 是您分配的唯一实例,而 $photoID 是您的网址的其他(假定)变量(最后一段)。
class Entry extends CI_Controller(
{
function details {$contestID, $photoID)
{ //do your codeZ here }
}
有关更多信息,请参阅URI routing。您可能还需要考虑 __remap() 覆盖函数,以防万一。