Symfony form (P3)

Symfony Form (P3)

Phần 2 bạn có thể đọc tại đây

https://viblo.asia/cuongnv_540/posts/NPVMaxLVRQOk

Sử dụng doctrine migrations version để quản lý databases

  • Một vấn đề thường gặp phải trong việc phát triển web đó là làm sao để quản lý việc thay đổi database của bạn. Việc quản lý thay đổi này được hỗ trợ trong Doctrine qua các version migrations. Nó cung cấp đầy đủ các công cụ cần thiết nhằm giải quyết vấn đề này.

  • Đầu tiên ta hãy coi database hiện tại là nên tảng cho database của project hiện tại

a815ddbe9e58ea390d9a1d9a35e601202ee70b0b.png

Các bước tạo Migrations

B1. Chạy lệnh sau để generate migration trong database.

Screenshot from 2016-02-22 16:03:49.png

Như trong trường hợp của tôi ta có :

Screenshot from 2016-02-22 16:04:53.png

  • Lỗi tôi nhận được ở trên là do trong database của tôi chẳng khác gì so với trên schema.yml nên Doctrine không thể tạo ra file migrations mới. Các bạn không cần lo lắng nếu có lỗi này.
  • Để tránh các lỗi không mong muốn xảy ra tôi khuyên bạn không nên sửa chữa gì file schema trước khi tạo migration cho project. Hãy để cho cấu trúc db giống với những gì được khai báo trong schema.yml. Để sau khi set up thành công migrations cho db thì các sửa chữa của bạn sẽ thành 1 version của migrations.

B2. generate migrations cho model

Screenshot from 2016-02-22 16:08:57.png

Lúc này thì thư mục lib/migration sẽ được tạo ra

Screenshot from 2016-02-22 16:11:09.png

  • Lưu ý vì đây là phiên bản đầu tiên của migration nên các file migration không có tên version đi kèm .

B3. drop database cũ và tạo db mới dựa trên các file migrations

  • Chú ý có sự khác nhau giữa việc tạo file dựa trên migrations . Như ở bài 1 thì việc tạo db dựa vào file schema. Còn ở đây là tạo db dựa vào file migration. Sau này nếu schema thay đổi thì ứng với mỗi lần thay đổi schema sẽ tạo ra 1 version migration mới.

  • Chạy tập lệnh sau

Screenshot from 2016-02-22 16:15:31.png

  • Kết quả thu được :

Screenshot from 2016-02-22 16:16:23.png

  • Kết quả trong database:

Screenshot from 2016-02-22 16:17:17.png

  • Như vậy ta đã hoàn thành việc sử dụng Doctrine migrations để quản lý version db.

Embed 1 form vào 1 form khác

  • Trở lại với chủ để symfony form của tôi. Trong bài này tôi sẽ giới thiệu với các bạn việc nhúng 1 form vào 1 form khác.

  • Trong symfony thì 1 form là đại diện của một object nào đó. Nhưng trong thực tế thì 1 trang bạn có thể phải hiển thị thông tin của nhiều object chứ không chỉ 1. Vậy nếu một trang yêu cầu sửa thông tin của 2 hay nhiều object bạn sẽ phải khai báo lần lược các form rồi sử lý việc lưu dữ liệu của các form đó 1 cách riêng rẽ.

  • Trong symfony bạn có thể làm việc này bằng cách lựa chọn một form cho 1 object nào đó rồi sau đó nhúng form của các object còn lại vào. Nói nôm na là một form có thêm các thuộc tính mà các thuộc tính này là một form của object khác.

  1. Sửa lại database
  • Để làm việc này tôi sẽ đưa ra một ví dụ.

Screenshot from 2016-02-22 16:23:14.png

  • Đây là thông tin hiển thị của 1 job. Bây giờ phát sinh yêu cầu là thêm một số thông tin bổ sung cho job nay. 1 job có thể có 1 hay nhiều thông tin bổ sung.

  • Vì vậy ta phải thêm một bảng để chứa thông tin bổ sung cho job.

Screenshot from 2016-02-22 16:24:45.png

  • Thêm vào schema.yml một bảng mới ExtendedJobInformation có nội dung như trên.

  • Để tạo migration từ thay đổi trên ta làm như sau

  • Đầu tiên tạo file migration từ thay đổi của schema.yml

Screenshot from 2016-02-22 16:50:40.png

  • 2 file mới được tạo ra ứng với sự thay đổi schema

Screenshot from 2016-02-22 16:51:13.png

  • Chạy file migration để update db lên version mới nhất

Screenshot from 2016-02-22 16:52:09.png

Screenshot from 2016-02-22 16:52:32.png

  • Bước cuối: Cập nhật lại form, filters, model cho giống với sự thay đổi tương ứng của db

Screenshot from 2016-02-22 16:53:49.png

  • Như vậy ta đã hoàn thành việc thêm 1 table mới vào db. Screenshot from 2016-02-22 16:55:23.png

Tài liệu tham khảo: http://symfony.com/legacy/doc/jobeet/1_2/vi_VN/03?orm=Doctrine


All Rights Reserved