亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

設(shè)置請(qǐng)求數(shù)據(jù) - CakePHP 4
P粉212971745
P粉212971745 2024-03-26 14:02:51
0
1
783

我們有一個(gè) CakePHP 3.x 應(yīng)用程序,我們已將其更新到最新的 CakePHP 4.x。作為這項(xiàng)工作的一部分,我們還從 PHP 7 更改為 PHP 8。

在測(cè)試應(yīng)用程序時(shí),我們注意到一個(gè)功能已停止工作。

該應(yīng)用程序是一個(gè)可搜索的數(shù)據(jù)庫(kù),并與 Redis 集成以進(jìn)行緩存。其中一項(xiàng)功能意味著用戶搜索在頁(yè)面重新加載之間得以保留。這是通過(guò)將序列化表單數(shù)據(jù)寫(xiě)入 Redis,然后將其重新填充回模板中的 input 字段來(lái)實(shí)現(xiàn)的。這意味著用戶可以看到他們輸入的搜索條件;刷新頁(yè)面時(shí),他們不需要重新輸入搜索條件。

CakePHP 3.x 應(yīng)用程序中重新填充 input 表單字段的代碼如下所示:

$form_fields = ['f1', 'f2', 'f3'];

$form_fields 數(shù)組包含模板中 input 表單的名稱。舉個(gè)例子:

<input type="text" name="f1">

代碼的下一部分重新填充表單。在本例中,$user_search 是從 Redis 獲取并反序列化的數(shù)據(jù)數(shù)組。例如,我們可能有 $user_search['f1']$user_search['f3'] 包含 Redis 數(shù)據(jù); f2 未填充,因?yàn)橛脩魶](méi)有使用該字段進(jìn)行搜索。

foreach ($form_fields as $form_field) {
    $this->request->getData()[$form_field] = (isset($user_search[$form_field])) ? $user_search[$form_field] : '';
}

在 Cake 3.x 應(yīng)用程序中,上述工作正常。當(dāng)頁(yè)面重新加載時(shí),表單字段由于設(shè)置請(qǐng)求數(shù)據(jù)而設(shè)置,例如在上面的循環(huán)中,它的計(jì)算結(jié)果為:

$this->request->getData()['f1'] = 'foo';
$this->request->getData()['f3'] = 'bar';

這意味著請(qǐng)求數(shù)據(jù)的“foo”為 f1,“bar”為 f3。 f2 中沒(méi)有任何內(nèi)容,因此根據(jù) : ''; 條件將其設(shè)置為空字符串。

在 CakePHP 4.x 應(yīng)用程序中,這不起作用;頁(yè)面重新加載時(shí),所有表單字段均未填充。我已經(jīng)通過(guò)將上面提到的 : ''; 條件修改為 : 'test'; 來(lái)確認(rèn)它們沒(méi)有被設(shè)置為空字符串,并確保字符串“test”沒(méi)有顯示在字段中。

數(shù)據(jù)存在于 Redis 中,并且我已經(jīng)確認(rèn) $user_search 包含上面顯示的內(nèi)容 - 換句話說(shuō),數(shù)據(jù)沒(méi)有丟失,所以我們已經(jīng)排除了這一點(diǎn)。

當(dāng)我閱讀 https://book.cakephp.org/4/en/controllers/request-response.html 時(shí),我看不到設(shè)置請(qǐng)求數(shù)據(jù)的示例。有一個(gè)方法 getData() 可以實(shí)現(xiàn)您所期望的功能 - 它讀取請(qǐng)求數(shù)據(jù)。

有沒(méi)有辦法在 Cake 4.x 中設(shè)置請(qǐng)求數(shù)據(jù),以便上面的代碼可以工作?

在普通 PHP 中,我們所做的相當(dāng)于

$_POST['f1'] = 'foo';
$_POST['f2'] = ''; // empty string as no value set by user
$_POST['f3'] = 'bar';

據(jù)我所知,這在 PHP 中曾經(jīng)并且仍然有效;您可以使用代碼中的任何內(nèi)容設(shè)置/覆蓋請(qǐng)求數(shù)據(jù)。如果這是錯(cuò)誤的,請(qǐng)告訴我應(yīng)該做什么。

為了清楚起見(jiàn),我們以這種方式設(shè)置請(qǐng)求數(shù)據(jù)的原因是因?yàn)樗阉魇峭ㄟ^(guò) ajax 調(diào)用進(jìn)行的。當(dāng)用戶最初輸入搜索條件時(shí),頁(yè)面尚未重新加載,因此表單字段似乎已正確填充。此問(wèn)題發(fā)生在頁(yè)面重新加載時(shí)。在這種情況下,我們希望使用他們?cè)谥匦录虞d頁(yè)面之前輸入的值重新填充表單。

P粉212971745
P粉212971745

全部回復(fù)(1)
P粉722521204

您正在尋找的函數(shù)是withData。請(qǐng)記住,請(qǐng)求對(duì)象是不可變的,因此您需要將該函數(shù)調(diào)用的結(jié)果分配回請(qǐng)求對(duì)象,例如與$this->setRequest($this->getRequest()->withData('f1', 'foo')->withData('f3', 'bar'))。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板