최신 CakePHP 4.x로 업데이트된 CakePHP 3.x 애플리케이션이 있습니다. 이 작업의 일환으로 우리는 PHP 7에서 PHP 8로 변경했습니다.
앱을 테스트하는 동안 기능이 작동하지 않는 것을 발견했습니다.
이 애플리케이션은 검색 가능한 데이터베이스이며 캐싱을 위해 Redis와 통합되어 있습니다. 기능 중 하나는 페이지를 다시 로드할 때마다 사용자 검색이 보존된다는 의미입니다. 이는 직렬화된 양식 데이터를 Redis에 작성한 다음 이를 템플릿의 input
필드에 다시 채워서 수행됩니다. 즉, 사용자는 페이지를 새로 고칠 때 검색어를 다시 입력할 필요 없이 자신이 입력한 검색어를 볼 수 있습니다.
input
CakePHP 3.x 애플리케이션에서
으아악
$form_fields
数组包含模板中 input
$form_fields
배열에는 템플릿의
으아악
$user_search
是从 Redis 获取并反序列化的数据数组。例如,我们可能有 $user_search['f1']
和 $user_search['f3']
包含 Redis 数据; f2
코드의 다음 부분은 양식을 다시 채웁니다. 이 경우 사용자가 해당 필드를 사용하여 검색하지 않았기 때문에
으아악 Cake 3.x 애플리케이션에서는 위의 내용이 제대로 작동합니다. 페이지가 다시 로드되면 설정
요청 데이터의 결과로 양식 필드가 설정됩니다. 예를 들어 위 루프에서는 다음과 같이 평가됩니다.
으아악
f1
,“bar”为 f3
。 f2
中没有任何内容,因此根据 : '';
이는 "foo"에 대해 요청된 데이터가
CakePHP 4.x 애플리케이션에서는 페이지가 다시 로드될 때 모든 양식 필드가 채워지지 않습니다. 위에서 언급한 를 추가하고 "test" 문자열이 필드에 표시되지 않는지 확인하여 빈 문자열로 설정되지 않았음을 확인했습니다. : '';
条件修改为 : 'test';
p>데이터는 Redis에 존재하며,
에 위에 표시된 내용이 포함되어 있음을 확인했습니다. 즉, 데이터가 손실되지 않으므로 이를 배제했습니다. $user_search
요청 데이터 설정 예가 표시되지 않습니다. 예상한 대로 수행하는 메서드 가 있습니다. 이 메서드는 요청된 데이터를 getData()
읽는 것입니다.
일반 PHP에서 우리가 하는 일은
과 동일합니다. 으아악
내가 아는 한 이것은 PHP에서 작동하며 코드의 모든 항목을 사용하여 요청 데이터를 설정/재정의할 수 있습니다. 이것이 잘못된 경우 어떻게 해야 하는지 알려주세요.명확하게 말하면 요청 데이터를 이렇게 설정한 이유는 검색이 Ajax 호출을 통해 이루어지기 때문입니다. 사용자가 처음 검색 기준을 입력하면 페이지가 아직 새로 로드되지 않았으므로 양식 필드가 올바르게 채워진 것으로 나타납니다. 이 문제는 페이지를 다시 로드할 때 발생합니다. 이 경우 페이지를 다시 로드하기 전에 입력한 값으로 양식을 다시 채우고 싶습니다.
당신이 찾고 있는 기능은
withData
。请记住,请求对象是不可变的,因此您需要将该函数调用的结果分配回请求对象,例如与$this->setRequest($this->getRequest()->withData('f1', 'foo')->withData('f3', 'bar'))
입니다.