CodeIgniter - 可选参数

9
我是一名CodeIgniter新手,需要制作如下所示的URL:

controllername/{uf}/{city}

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

另一个可能的URL是:

controllername/{uf}/{page}

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

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

3个回答

17

我找到了正确的结果:

$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';

“ControllerName” 中的 Index 方法应该是:
public function Index($uf = '', $slug = '', $pag = 0)
{
    // some code...

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

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

希望这能帮助到有需要的人。 谢谢大家。


在我的情况下,它仍然无法通过“null”。我总是在这个位置得到下一个参数。 - V.Vachev
3
尝试使用0(零)代替null。 - Silvio Delgado
这正是我所做的,而且它可以正常工作。Null似乎是路由中的一些“特殊/保留”单词。它肯定有不同的行为。 - V.Vachev

1
public function my_test_function($not_optional_param, $optional_param = NULL)
  { 
   //do your stuff here
  }

你试过这个吗?

是的。但第二个参数是可变的。有时是字符串(城市缩写),有时是数字(页码)。 - Silvio Delgado
太好了!我还可以使用正则表达式来代替“:any”和“:num”。谢谢。 - Silvio Delgado

0

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

  1. example.com/index.php/mycontroller/myfunction/hello/world
  2. example.com/index.php/mycontroller/myfunction/hello

您的方法将接收URI段3和4(“hello”和“world”):

class MyController extends 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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接