2011-09-16 5 views
0

작은 샵에서 간단한 체크 아웃을하고 있으며 사용자에게 최종 검토 옵션을 제공하고 싶습니다. 그래서 흐름은 입니다. 바구니 ->구매자 정보 ->주문 리뷰 ->주문 확인.다중 페이지 체크 아웃 - 데이터 전송

이제 2 단계와 3 단계 사이에서 데이터를 전송하는 가장 좋은 방법은 무엇입니까?

한 가지 옵션은 HTML 및 숨김 양식 필드를 사용하는 것입니다. 단점은 3 단계 이후 (입력이 사용자가 수정할 수 있기 때문에) 다른 입력 확인을해야한다는 것입니다.

다른 옵션은 세션을 사용하는 것입니다. 순서가 객체 (Sf2 Entity)에 저장되므로 배열로 변환 한 다음 나중에 다시 변환해야합니다. 또한 세션 변수에 너무 많은 데이터를 저장하면 성능에 부정적인 영향을 줄 수 있다는 점을 읽었습니다.

제 3의 옵션은 db에 저장되지만 최종 확인까지는 저장하지 않을 것을 선호합니다.

더 좋은 방법이 있습니까?

+0

은 체크 아웃 카트와 cart_items위한 테이블을 가진 포함 할 때까지 아무것도를 저장하고자하지 않을까요? 아니면 이미 가지고 있니? – thegaffney

+0

@ thegaffney, 나는 그것들을 가지고 있지만 주문이 실제로 만들어 질 때까지 데이터를 저장하지 않아도됩니다. 그렇지 않으면 내가 만든 명령에 대한 정리 메커니즘이 필요합니다. – Czechnology

+0

결국 세션을 사용했습니다. 모든 해답을 +1 해 주셔서 감사합니다! – Czechnology

답변

2

폼 데이터가 많지 않다면 세션 변수가 여기 좋을 것 같습니다. 메모리에 대해 걱정할 경우 최종 확인 후 언제든지 해당 데이터를 제거 할 수 있습니다.

2

캐시 수준 (예 : APC 또는 Memcached)에 이러한 데이터를 저장하고 만료 시간을 설정할 수 있습니다.

또는 그냥 같은 Yii's solution는 숨겨진 입력을 사용하여 값으로 설정하십시오 해시 (비밀 +의 64 기수 (데이터)) + 64 기수 (데이터), 당신은 단계에서 먼저 해시를 확인해야합니다 3.

나쁜 영어 분실. :)

+0

그러면 유효성 검사를 추가하여 유효성 검사를 제거 하시겠습니까? – Dani

1

세션이 그 작업에 적합합니다. 데이터가 데이터베이스에 저장되도록 세션 처리를 조정할 수 있습니다. 캐싱은 데이터베이스 읽기/쓰기 절차이기 때문에 더 빠르지 않습니다.

1

나는 세션에서 flashdata로 저장하겠다. 이것은 완벽하게 작동하며 원하는 경우 세션이 지워집니다.

심포니 2 flashdata를 사용하려면

$this->get('session')->setFlash('key', 'value'); 
+0

다음 요청에서 flashdata가 지워지지 않았습니까? 고객이 주문 확인 페이지를 새로 고침하면 어떻게됩니까? – Problematic

+0

플래시 데이터가 해당 페이지에 있으면 읽을 수 있습니다. –