CakePHP Router:如何传递第一个参数null?

时间:2013-11-21 10:17:09

标签: cakephp

我的行动定义如下:

function actionName($par1 = null, $par2 = null)

我需要一条特殊的路线,如: example.com/r/ABCD ,应致电

SomeController->actionName(null, "ABCD")

如何使用Cake的Router :: connect()来实现?

2 个答案:

答案 0 :(得分:1)

您可以尝试撤消

之类的参数
function actionName( $par2 = null, $par1 = null)

答案 1 :(得分:0)

1.- arg1可选,arg2不可选

我会改变参数的顺序,所以第一个参数是真正可选的。

2.- arg1可选,arg2不是可选的,没有重新排序 (不是最好的主意,但我认为业务规则要求它)

制作包装函数。

SomeController {
    wrapperFun(arg2) {
        actualFunction(null, arg2)
    }
    actualFun(arg1, arg2) {
        // do something
    }
}

现在你可以:

  

SomeController / wrapperFun / ABC

     

SomeController / actualFun / ARG1 / ABC

然后凭借路由的魔力,您可以将actualFun/ABC重定向到wrapperFun/ABC。因此,用户只会看到漂亮的网址。

3.- arg1可选,arg2可选

所以你有4种可能的选择,对吧?

somecontroller/action/arg1/arg2
somecontroller/action/arg1
somecontroller/action/arg2
somecontroller/action

我相信这是你的实际问题:

  

如何处理具有多个可选参数的函数?

在这种情况下,您需要使用的是关联数组。这实际上是CakePHP在很多方面的表现。它看起来像这样:

$arr = {"arg2" => "some val"};
// calling the function with $arr
// some_action($arr);
some_action($argArr) {
    $arg1 = isset($argArr["arg1"]) ? $argArr["arg1"] : null;
    $arg2 = isset($argArr["arg2"]) ? $argArr["arg2"] : null;
}

现在,关于URL,由您决定。您必须具有一种机制,可以告诉您URL的每个部分表示的值。我想到的是两个选择:

首先,使用占位符(丑陋):

some_controller/some_action/arg1/non/arg3/non/arg4

或者,使用包装器操作,类似于我之前的答案(丑陋)。

some_controller/action5/arg5
// then in the wrapper (action5) you have:
action5(arg) {
     $arr = {"arg5" => arg};
     some_action($arr);
}

正如您所看到的,这可能很容易失控。我不知道你究竟想做什么,但似乎你是通过错误的渠道发送数据。

您可能希望使用POST并直接使用数组,而不是自己构建数组,请查看request object