0

所以 redmine 有一种我观察到的非常奇特的 url 映射样式:

http://demo.redmine.org/projects/<project-name>/controller/action

样品:

http://demo.redmine.org/projects/produto/activity
http://demo.redmine.org/projects/produto/issues/new
http://demo.redmine.org/projects/produto/issues/gantt
http://demo.redmine.org/projects/produto/files

并且 url 会随着项目的变化而变化。

我如何在 codeigniter 中做到这一点?我认为它可以用 routes.php 完成,但到目前为止我无法到达任何地方。

寻求任何帮助。谢谢。

4

3 回答 3

3

在“application/controllers/projects.php”控制器中使用以下函数:

public function _remap($method)
{
    if ($method == 'project-name')
    {
        //display project1
    }
    elseif($method == 'project-name2')
    {
        //display project2
    }
}

您可以通过从数据库中提取它们来对不同的方法执行相同的操作

看看这里: http ://codeigniter.com/user_guide/general/controllers.html#remapping

您还可以使用 application/config/routes.php 中的自定义路由来路由控制器

$route['example'] = "controller/function";
$route['example2/(:any)'] = "controller/function";
于 2012-04-20T22:26:29.620 回答
2

您使用 application/config/routes.php 中的路由文件您将使用如下内容:

// the $1 maps to :any
$route['projects/produto/:any'] = "$1";

// the $1 maps to the first any, $2 maps to the second :any
$route['projects/produto/:any/:any'] = "$1/$2";

如果您正在处理干净的 URL,您将希望启用 mod_rewrite。否则期待 index.php/controller/action。我不能在那里自己测试,但你应该参考:

添加路由后(必须在配置中调用 $route[]),刷新页面并尝试转到 URL!

http://codeigniter.com/user_guide/general/routing.html

于 2012-04-20T22:14:53.197 回答
0

将此添加到您的 routes.php (顺便说一句:您需要启用 url-rewriting 才能使路由工作,即使用.htaccess

$route['projects/(:any)/(:any)/(:any)'] = "$2/$3/$1";

例如/projects/produto/issues/new将在类问题中调用函数 new 并将参数'produto'传递给它

还要检查http://codeigniter.com/user_guide/general/routing.html

于 2012-04-20T22:14:06.250 回答