2012-05-17 36 views
9

Đây là một nhiệm vụ đơn giản để giải quyết trong Symfony2 nhưng tôi thực sự bị kẹt ở đây:Symfony2: Làm thế nào để tạo biểu mẫu thực thể với việc tạo ra nhiều subentities?

Tôi đang xây dựng một cửa hàng rất đơn giản. Có ba thực thể: Products, CustomersOrders. Phần cuối cùng chứa ba cột: customer_id, product_idquantity. Cửa hàng chỉ đơn giản bao gồm một trang liệt kê tất cả các sản phẩm với một lĩnh vực lựa chọn cho mỗi để chọn số lượng, theo sau là một hình thức để nhập dữ liệu khách hàng của bạn.

Tôi không gặp sự cố khi tạo biểu mẫu cho dữ liệu khách hàng hoặc tự liệt kê sản phẩm (không có trường chọn).

Nhưng làm cách nào để tạo biểu mẫu bao gồm các trường chọn của sản phẩm, sau đó sẽ trở thành thực thể đơn hàng?

Tôi đã chơi xung quanh với bộ sưu tập biểu mẫu và tôi hiểu tất cả các ví dụ đã cho bằng cách thêm thẻ vào thực thể, v.v. Nhưng tôi không thể hiểu cách điều chỉnh nó cho tình huống của mình.

Những gì tôi có trong tâm trí đi một cái gì đó như thế này:

// Create new customer 
$customer = new Customer(); 

// At this point, create form and validate it. 
// Having trouble here, need a hint to get it right. 
... 

// If form is ok, loop thru all the products. 
// Since I do not know yet how to define the form, 
// I don't know yet what to loop over, too. 
foreach(.....){ 
    if($quantity > 0){ 
     $order = new Order(); 
     $order->setQuantity($quantity); 
     $order->setProduct($product); 
     $customer->addOrder($order); 
    } 
} 

// then persist $customer, cascading its orders. 
... 

Tôi đã được chi tiêu giờ về vấn đề này. Bất kỳ trợ giúp nào cũng được đánh giá rất cao. Cảm ơn!

Cập nhật: Cuối cùng tôi đã làm việc. Tôi đã tạo một OrderFactoryOrderFormType và phải thay đổi xung quanh toàn bộ cài đặt một chút. AcmePizzaBundle được đề cập trong các câu trả lời dưới đây thực sự là một trợ giúp tuyệt vời để có được những phần còn thiếu ngay.

+2

Tôi nghĩ bạn đang làm điều này phức tạp hơn mức cần thiết. Bạn cần một OrdersFormType sẽ có một bộ sưu tập thực thể sản phẩm (cho danh sách các sản phẩm) cũng như một trường số lượng. Sau đó bạn nhúng một tập hợp các OrdersFormTypes vào CustomerFormType của bạn. Nhưng tôi nghĩ rằng bạn sẽ tiết kiệm cho mình một số nhức đầu nếu bạn làm theo một mô hình đặt tên thông thường hơn. – Cerad

Trả lời

9

Hãy xem ví dụ: AcmePizzaBundle. Nó có 4 thực thể bạn cần: Pizza, Đặt hàng, OrderItem, Khách hàng.

+0

Cảm ơn. Đây là một ví dụ tốt về nhiều khía cạnh. Tuy nhiên tôi biết làm thế nào để tạo ra một mẫu đơn đặt hàng năng động như trong ví dụ này. Vấn đề của tôi là đơn giản hơn nhiều: làm thế nào tôi có thể liệt kê tất cả các loại pizza sẵn có từ đầu và sau đó chỉ chọn số lượng tôi muốn? – sprain

+0

@sprain nghĩa là cách thiết kế giỏ hàng nơi người dùng có thể chọn số lượng? – meze

+0

Không giống như một giỏ mua hàng, nhưng chỉ là một cửa hàng rất đơn giản với số lượng lựa chọn. Như thế này: http://sprain.public.s3.amazonaws.com/stuff/simplestore.png Tôi không biết cách xác định biểu mẫu để làm việc này. – sprain

Các vấn đề liên quan