CodeIgniter - 可选参数

时间:2013-09-24 04:52:59

标签: php codeigniter

我正在构建我的第一个CodeIgniter应用程序,我需要创建如下的URL:

controllername/{uf}/{city}

示例:/ rj / rio-de-janeiro 这个例子应该给我2个参数:$ uf('rj')和$ city('rio-de-janeiro')

另一个可能的URL是:

controllername/{uf}/{page}

示例:/ rj / 3 这个例子应该给我2个参数:$ uf('rj')和$ page(3)

换句话说,参数“city”和“page”是选项。 我不能传递'/ uf / city / page'之类的东西。我总是需要或'城市'或''页'。 但我不知道如何在CodeIgniter配置中配置这些路由以指向相同的方法(甚至是不同的方法)。

3 个答案:

答案 0 :(得分:12)

我找到了正确的结果:

$route['controllername/(:any)/(:any)/(:num)'] = 'ddd/index/$1/$2/$3';
$route['controllername/(:any)/(:num)'] = 'ddd/index/$1/null/$2'; // try 'null' or '0' (zero)
$route['controllername/(:any)'] = 'ddd/index/$1';

Index方法(在“ControllerName”中)应为:

public function Index($uf = '', $slug = '', $pag = 0)
{
    // some code...

    if (intval($pag) > 0)
    {
        // pagination
    }

    if (!empty($slug))
    {
        // slug manipulation
    }
}

希望它有所帮助。 谢谢大家。

答案 1 :(得分:1)

public function my_test_function($not_optional_param, $optional_param = NULL)
  { 
   //do your stuff here
  }
你试过这个吗?

答案 2 :(得分:0)

例如,假设你有一个像这样的URI:

  1. example.com/index.php/mycontroller/myfunction/hello/world
  2. example.com/index.php/mycontroller/myfunction/hello
  3. 您的方法将传递URI段3和4(“hello”和“world”):

    class MyController扩展了CI_Controller {

    public function myFunction($notOptional, $optional = NULL)
    {
        echo $notOptional; // will return 'hello'.
        echo $optional; // will return 'world' using the 1st URI and 'NULL' using the 2nd.
    }
    

    }

    参考:https://codeigniter.com/user_guide/general/controllers.html