Đâ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
, Customers
và Orders
. Phần cuối cùng chứa ba cột: customer_id
, product_id
và quantity
. 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 OrderFactory
và OrderFormType
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.
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