2017-12-19 21 views
-2

EDIT/CLARIFICATION :이 질문은 변환을 CakePHP 3.x에 연결할 위치를 묻습니다. bin을 16 진수로 변환하는 방법을 알고 있습니다. 문제는 CakePHP 3.x 모델 구조에서 결과 행을 가로 채고 변경할 위치입니다.CakePHP 3에서 검색된 필드를 가로 채기하려면 어떻게해야합니까?

저는 MySQL 테이블에 varbinary (16)로 UUID 데이터를 저장하고 있습니다. 이것은 기본 키가 아닙니다. 이 필드를 읽었을 때 PHP에서 표준 36 문자 문자열 (바이너리가 하이픈이 삽입 된 16 진수로 변환)로 변환하고 싶습니다. CakePHP 2.x에서는 afterFind() 콜백을 사용했을 것입니다. CakePHP 3.x 문서는 use Map/Reduce이라고 말하고 있지만, 이는 코드에서 모든 find()를 찾는 것을 의미합니다. 아마도 CakePHP 3 Behaviour로 모델에서이를 수행 할 수 있어야합니다.

표는 다음과 같습니다 : 만 데이터베이스에서 읽기에 대해 부탁 해요

create table `books` (
`id` int(10) unsigned not null auto_increment, 
`my_uuid` varbinary(16) not null, 
`created` timestamp not null default current_timestamp on update current_timestamp, 
primary key (`id`), 
) engine=InnoDB; 

참고. 삽입 및 업데이트가 정상적으로 작동합니다. 나는 바이너리를 읽어서 문자열로 변환하고 싶다. 나는 모델 계층 (테이블/엔티티)에서 그렇게해야한다고 생각한다.

+0

http://php.net/manual/en/function.bin2hex.php http://php.net/manual/en/function.substr.php – Sammitch

+0

@Sammitch 그래서 문구를 넣을 수있는 방법이 있습니다. PHP에서 바이너리 문자열을 다루는 것이 아니라는 것을 분명히 해두시겠습니까? CakePHP 3에서 올바른 위치를 찾는 것입니다. –

+1

커스텀 데이터베이스 타입 (btw, ** VAR ** BINARY?)을 사용하거나 result 포맷터를 사용합니다. 후자는 beforeFind 이벤트 모델에 적용 할 수 있습니다. ** https : //stackoverflow.com/questions/32260229/encyption-decryption-of-form-fields-in-cakephp-3**/** https : //github.com/cakephp/cakephp/blob/3.5. 8/src/Database/Type/BinaryType.php ** – ndm

답변

0

사용자 지정 데이터베이스 유형이 상황을 해결합니다. Custom data types의 예를 따르십시오. 솔루션에 대한 감사합니다.