我的行動的定義如下:CakePHP路由器:如何傳遞第一個參數爲null?
function actionName($par1 = null, $par2 = null)
我需要一個特殊的路徑看起來像:example.com/r/ABCD這應該叫
SomeController->actionName(null, "ABCD")
它是如何與蛋糕的實現Router :: connect()?
我的行動的定義如下:CakePHP路由器:如何傳遞第一個參數爲null?
function actionName($par1 = null, $par2 = null)
我需要一個特殊的路徑看起來像:example.com/r/ABCD這應該叫
SomeController->actionName(null, "ABCD")
它是如何與蛋糕的實現Router :: connect()?
你可以嘗試扭轉PARAMS像
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
。所以用戶只會看到漂亮的網址。
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;
}
現在,關於URLs,這是由您決定的。你必須有一個機制,告訴你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。
我想包裝是唯一的選擇。歡呼 –
我剛纔在博比的回答中看到了你的評論。鑑於新的需求,我會修改答案。 – givanse
我不認爲這是可能的默認蛋糕路由功能。你應該首先避免這種情況。 ps,請始終提及您的確切CakePHP版本! – ndm
如果你的第一個參數是NULL,那麼聽起來你的參數可能會被重新排序。 –