Menetapkan data permintaan - CakePHP 4
P粉212971745
P粉212971745 2024-03-26 14:02:51
0
1
444

Kami mempunyai aplikasi CakePHP 3.x yang telah kami kemas kini kepada CakePHP 4.x terkini. Sebagai sebahagian daripada kerja ini, kami juga menukar daripada PHP 7 kepada PHP 8.

Semasa menguji apl, kami mendapati bahawa ciri telah berhenti berfungsi.

Aplikasi ini adalah pangkalan data yang boleh dicari dan disepadukan dengan Redis untuk caching. Satu ciri sedemikian bermakna carian pengguna dikekalkan antara muat semula halaman. Ini dicapai dengan menulis data borang bersiri ke Redis dan kemudian mengisinya semula ke dalam medan input dalam templat. Ini bermakna pengguna boleh melihat istilah carian yang mereka masukkan, mereka tidak perlu memasukkan semula istilah carian apabila halaman dimuat semula.

Kod untuk mengisi semula input medan borang dalam aplikasi

CakePHP 3.x kelihatan seperti ini:

$form_fields = ['f1', 'f2', 'f3'];
Tatasusunan $form_fields 数组包含模板中 input$form_fields mengandungi nama

borang dalam templat. Contohnya:

<input type="text" name="f1">
$user_search 是从 Redis 获取并反序列化的数据数组。例如,我们可能有 $user_search['f1']$user_search['f3'] 包含 Redis 数据; f2Bahagian seterusnya kod mengisi semula borang. Dalam kes ini,

tidak diisi kerana pengguna tidak mencari menggunakan medan tersebut.

foreach ($form_fields as $form_field) {
    $this->request->getData()[$form_field] = (isset($user_search[$form_field])) ? $user_search[$form_field] : '';
}
Dalam aplikasi Cake 3.x, perkara di atas berfungsi dengan baik. Apabila halaman dimuat semula, medan borang ditetapkan sebagai hasil daripada set

meminta data, contohnya dalam gelung di atas ia menilai kepada:

$this->request->getData()['f1'] = 'foo';
$this->request->getData()['f3'] = 'bar';
f1,“bar”为 f3f2 中没有任何内容,因此根据 : '';Ini bermakna data yang diminta untuk "foo" ialah

dan syarat menetapkannya kepada rentetan kosong.

Dalam aplikasi CakePHP 4.x, ini tidak berfungsi : ''; 条件修改为 : 'test';; apabila halaman dimuat semula, semua medan borang tidak diisi. Saya telah mengesahkan bahawa mereka tidak ditetapkan kepada rentetan kosong dengan menambahkan yang dinyatakan di atas dan memastikan bahawa rentetan "ujian" tidak ditunjukkan dalam medan.

$user_searchData wujud dalam Redis, dan saya telah mengesahkan bahawa

mengandungi apa yang ditunjukkan di atas - dengan kata lain, data itu tidak hilang, jadi kami telah menolaknya.

Apabila saya membaca https://book.cakephp.org/4/en/controllers/request-response.html, saya tidak nampak contoh tetapan getData()permintaan data. Terdapat kaedah yang melakukan apa yang anda harapkan - ia membaca

data yang diminta.

Adakah cara untuk menetapkan data permintaan dalam Cake 4.x supaya kod di atas boleh berfungsi?

Dalam PHP biasa, apa yang kami lakukan adalah bersamaan dengan

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

Setahu saya ini adalah dan masih berfungsi dalam PHP anda boleh menetapkan/mengatasi data permintaan menggunakan apa-apa sahaja dalam kod anda; Jika ini salah, sila beritahu saya apa yang perlu saya lakukan. 🎜

Sekadar untuk kejelasan, sebab kami menyediakan data permintaan dengan cara ini adalah kerana carian dilakukan melalui panggilan ajax. Apabila pengguna mula-mula memasukkan kriteria carian, halaman belum dimuat semula, jadi medan borang kelihatan diisi dengan betul. Isu ini berlaku apabila halaman dimuat semula. Dalam kes ini, kami ingin mengisi semula borang dengan nilai yang mereka masukkan sebelum memuat semula halaman.

P粉212971745
P粉212971745

membalas semua(1)
P粉722521204

Fungsi yang anda cari ialah withData。请记住,请求对象是不可变的,因此您需要将该函数调用的结果分配回请求对象,例如与$this->setRequest($this->getRequest()->withData('f1', 'foo')->withData('f3', 'bar')).

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan