CakePHP路由器:如何传递第一个参数null?
我的行为定义如下:CakePHP路由器:如何传递第一个参数null?,cakephp,Cakephp,我的行为定义如下: function actionName($par1 = null, $par2 = null) 我需要一条特殊的路线,看起来像:example.com/r/ABCD哪个应该呼叫 SomeController->actionName(null, "ABCD") 如何使用Cake的Router::connect()实现这一点?您可以尝试反转参数,如 function actionName( $par2 = null, $par1 = null) 1.-arg1可选,a
function actionName($par1 = null, $par2 = null)
我需要一条特殊的路线,看起来像:example.com/r/ABCD哪个应该呼叫
SomeController->actionName(null, "ABCD")
如何使用Cake的Router::connect()实现这一点?您可以尝试反转参数,如
function actionName( $par2 = null, $par1 = null)
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
。因此,用户只能看到漂亮的URL
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的每个部分代表什么值。我想到的是两种选择:
首先,使用占位符(丑陋):
或者,使用包装器操作,类似于之前在我的答案中看到的(也很难看)
正如你所看到的,这很容易失控。我不知道您实际上在尝试做什么,但似乎您通过错误的通道发送数据
您可能希望直接使用POST和阵列,而不是构建自己的阵列,请查看。我认为默认的蛋糕路由功能不可能做到这一点。你首先应该避免这种情况。ps,请始终提及您的确切CakePHP版本!如果您的第一个参数是
NULL
,那么听起来您的参数可能需要重新排序。如果我只想传递第二个参数而不是第一个参数,会发生什么?这又导致了同样的问题。我想包装是这里唯一的选择。谢谢,我刚刚在博比的回答中看到了你的评论。根据新的需要,我将修改答案。
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);
}