在Codeigniter中对“添加”和“编辑”使用相同的功能?

时间:2012-09-12 21:59:26

标签: codeigniter codeigniter-url codeigniter-routing

我想要这两个网址:

/管理/用户/添加

/管理/用户/ 3 /修改

指向我的用户控制器中的edit($user_id = 0)功能。第二个网址中的数字3必须传递给$user_id参数。

如何顺利完成这项工作?

4 个答案:

答案 0 :(得分:3)

在application / config / routes.php中的setting up a route

$route['admin/users/add'] = "users/edit";
$route['admin/users/(:num)/edit'] = "users/edit/$1";

如果您希望这也适用于其他控制器,您可以这样做:

$route['admin/(:any)/add'] = "$1/edit";
$route['admin/(:any)/(:num)/edit'] = "$1/edit/$2";

或者相同,使用正则表达式:

$route['admin/([a-z]+)/add'] = "$1/edit";
$route['admin/([a-z]+)/(\d+)/edit'] = "$1/edit/$2";

答案 1 :(得分:1)

作为分离逻辑的替代方案。

我通常有两个控制器,它们都使用相同的视图。

admin/user/add
admin/user/edit/3

两者都指向视图

admin/user_form.php

然后在发布表单时访问save_user()方法。

但正如Mischa所说,通过设置路线,你可以指出任何方法的任何网址。

答案 2 :(得分:0)

你能做到吗

public function users ($type, $id = null)
{
     if ($type === 'edit')
     {
           // do edit stuff
     }
     else
     {
           // ad add stuff
     }
 }

答案 3 :(得分:-3)

<强> Sulotion:

function _remap($method)
{
$param_offset = 2;

// No method, point to...
if (!method_exists($this, $method))
{
    if (is_numeric($method) || $method == 'add')
    {
        // Show single
        $param_offset = 1;
        $method = 'show';
    }
    else
    {
        // Index
        $param_offset = 1;
        $method = 'index';
    }
}

// Since all we get is $method, load up everything else in the URI
$params = array_slice($this->uri->rsegment_array(), $param_offset);

// Call the determined method with all params
call_user_func_array(array($this, $method), $params);
}