2012-06-06 27 views
12

Ý định của tôi không phải là so sánh hoặc thảo luận khung nào tốt hơn. Tôi biết sức mạnh từ cả CakePHP và Rails. Tôi chắc chắn rằng có một cách để làm những điều tương tự trong cả hai người trong số họ.Từ Rails 3.2 đến Cake PHP 2.0. Làm thế nào để làm một số nhiệm vụ phổ biến Rails?

Vì vậy, đây là tình huống: trong khung Rails, tôi thường làm những điều mà tôi muốn thực hiện trên CakePHP (một số trong số chúng tôi chưa tìm thấy trong tài liệu).

Đó là:

quản lý gói

Trong Rails, anh có chữ "Gemfile" tập tin, nơi tôi viết các phiên bản của mỗi "viên ngọc" được sử dụng trong ứng dụng. Nếu tôi muốn nâng cấp hoặc hạ cấp, tôi thay đổi phiên bản và chạy lệnh "cập nhật gói". Làm cách nào để cập nhật plugin? Bạn có sử dụng các công cụ như GIT để kiểm tra từng công cụ với các phiên bản mới hơn không?

Migrations

Khi tôi cần phải thay đổi cơ sở dữ liệu, tôi tạo ra một sản phẩm nào "di cư" tập tin thông qua các lệnh điều khiển "đường ray tạo di cư". Sau đó, trong tệp được tạo, tôi thêm các thay đổi, như "rename_column: users,: address,: location". Sau đó, tôi chạy "rake db: migrate" và cơ sở dữ liệu được di chuyển. Làm thế nào để làm điều đó trên CakePHP?

Deployment Automated

triển khai trong Rails có thể được thực hiện tự động bằng cách sử dụng "Capistrano" ruby ​​đá quý. Về cơ bản, tôi chạy "triển khai sản xuất mũ" trong dòng lệnh. Sau đó, dựa trên các hướng dẫn trên tệp "deploy.rb", nó đăng nhập vào (các) máy chủ, sao chép phiên bản mới nhất của mã từ kho git và sao lưu bản phát hành hiện tại, vì vậy tôi có thể khôi phục. Nó cũng có thể tạo các liên kết cho các thư mục "chia sẻ" (như tải lên của người dùng), biên dịch lại các tài sản, chạy di chuyển đang chờ xử lý, cài đặt các phụ thuộc mới, khởi động lại một số quy trình máy chủ, khởi động lại ứng dụng và thực thi các tác vụ dòng lệnh khác. Có gì tương tự trên CakePHP không?

Assets nén

Trong Rails, khi tôi đang ở trong chế độ sản xuất, CSS và tài sản JS sẽ được tự động biên dịch vào file duy nhất, và tái sinh sau mỗi lần triển khai. Đó là một tính năng gốc trong Rails 3.1+. Điều đó có thể xảy ra trên CakePHP không?

Công nhân và Công Việc Bối cảnh

Rails có thể sử dụng một viên ngọc gọi là "delayed_job" để enqueue nhiệm vụ được thực hiện ở chế độ nền bằng "công nhân", như gửi một e-mail sau khi người dùng đăng ký, ví dụ. Làm thế nào để bạn làm điều đó?

Namespaces cho bộ điều khiển

Nếu tôi muốn tạo ra một giao diện quản trị, hoặc một dịch vụ web (sử dụng "api" namespace, chẳng hạn), hoặc một không gian tên "di động", tôi chỉ tạo ra tương ứng thư mục trên thư mục "bộ điều khiển". Sau đó, tôi đặt các bộ điều khiển ở đó và tạo các tuyến để truy cập chúng. Cách tốt nhất để làm điều đó trên Bánh là gì?

mô hình truy cập các phương pháp từ cái nhìn

Dường như CakePHP trả về một mảng kết hợp khi tôi lấy dữ liệu từ cơ sở dữ liệu, và không phải là "đối tượng" true. Vì vậy, tôi không thể truy cập các phương thức mô hình. Giả sử lớp UserModel của tôi cung cấp một phương thức được gọi là "tuổi" để tính tuổi hiện tại của người dùng dựa trên ngày sinh của anh ấy. Trong Rails, tôi có thể làm điều này trên màn hình: <% = @ user.age%>. Tôi cần phải tạo ra một trợ giúp xem để làm điều đó trên bánh? Giống như calc_user_age ($ user); ?> (hoặc một cái gì đó như thế)? Tình huống khác: Giả sử tôi muốn nhận được nhận xét cuối cùng từ người dùng và trong nhận xét, hãy chèn liên kết tới bài đăng có liên quan bằng tiêu đề bài đăng. Trong Rails tôi sẽ làm một cái gì đó như @ user.comments.last.post.title để có được tiêu đề bài viết. Làm thế nào tôi có thể làm điều đó trong Cake, mà không sử dụng tính năng "đệ quy = 3" có nhiều dữ liệu không cần thiết?

Chaining mô hình phạm vi

Giả sử tôi có một mô hình được gọi là Post. Trong Rails, tôi có thể tạo phạm vi trên các mô hình và trộn chúng theo cách tôi muốn. Nếu tôi muốn nhận được "5 bài viết được xuất bản cuối cùng từ danh mục Lập trình được yêu cầu bởi truy cập nhiều nhất", ví dụ, tôi sẽ gọi cho họ theo cách này: "Post.published.from_category (" programming "). Most_accessed.limit (5) ". Nếu tôi chỉ muốn các bài đăng nháp được sắp xếp theo thời gian gần đây, được tích hợp với phân trang, tôi sẽ gọi "Post.drafts.recent.page (2)". Cách tốt nhất để tạo và chuỗi phạm vi trên CakePHP là gì? Xây dựng tự động một loạt các điều kiện và gửi nó như là tham số cho "tìm"?

thử nghiệm

các công cụ kiểm tra chấp nhận bởi hiệp CakePHP là gì? Tôi cần kiểm tra các mô hình và các phương thức của nó, kiểm tra các bộ điều khiển và các đáp ứng và các biến của nó, và kiểm tra nội dung của khung nhìn (cũng tương tác Javascript), tạo các đồ đạc, v.v. Tôi cũng sẽ biết nếu có cách tạo ra một thứ gì đó như tự động, chạy các kiểm tra sau khi lưu tệp.

Vâng, về cơ bản đây là những điểm. Xin lỗi vì bài đăng dài và tiếng Anh dễ bị lỗi và dư thừa của tôi (tôi không phải là người bản ngữ). Ngoài ra, tôi không phải là một chuyên gia. Vì vậy, tôi có thể viết một số thứ sai ở đây.

Hy vọng chúng ta có thể có một cuộc trò chuyện tốt. Cảm ơn bạn!

Trả lời

12

quản lý gói

AFAIK không có cập nhật và sử dụng rộng quản lý gói. Thông thường, chúng tôi thêm plugin bằng git. Plugins là bằng đá quý trong RoR tôi nghĩ.

Chỉnh sửa: Hiện tại có composer được CakePHP sử dụng và nhiều plugin.

Migrations

Sử dụng CakeDC migrations plugin hoặc build in schema shell.

Automated Deployment

Chúng tôi sử dụng fabric. Afaik không có plugin cho bánh mà tôi sẽ làm.

nén Asset

Use this plugin.

Namespaces cho bộ điều khiển

Đơn giản chỉ cần đặt chúng vào thư mục điều khiển và use the Router để tạo ra các tuyến đường cho họ. Cùng một cách bạn mô tả nó cho Rails.

phương pháp mô hình truy cập từ cái nhìn

Hả? Bạn làm điều đó trong Rails? Tôi không thích nó. Trong CakePHP bạn không nên làm điều đó và IMO không có trong bất kỳ ứng dụng MVC nào.

Đặt dữ liệu bạn cần trong chế độ xem từ bộ điều khiển.

$this->set('data', $this->Model->yourMethod()); 

Workers & backround Jobs

này có thể được thực hiện bằng cách writing shells.

Chaining Models

Chaining mô hình trong CakePHP được thực hiện máng associations. Và có họ sẽ có thể truy cập như $ this-> User-> Post-> find ('first') chẳng hạn. Bạn cũng có thể xây dựng complex find queries và các điều kiện trên nhiều bảng.

Tests

CakePHP đang sử dụng phpunit cho kiểm tra đơn vị. Đọc this section về nó trong sách CakePHP.

Tôi đề nghị

đã đọc cuốn sách: book.cakephp.org Nó chắc chắn sẽ trả lời hầu hết các câu hỏi của bạn và cho bạn thấy làm thế nào để làm nghĩ. Chất lượng tài liệu của phiên bản 2.0 là tuyệt vời.

+1

Hi burzum. Cảm ơn bạn đã trả lời! Chắc chắn tôi sẽ xem xét. Về chủ đề "Truy cập các phương thức mô hình từ chế độ xem", tôi nghĩ rằng tôi chưa đủ rõ ràng. Tôi sẽ không bao giờ truy xuất các mục từ một mô hình trong khung nhìn. Tôi làm điều đó trong bộ điều khiển. Những gì tôi có thể gọi là phương thức "age" trong đối tượng '@ user' được truyền cho khung nhìn, như' @ user.age' (một phương thức tự động tính tuổi người dùng dựa trên ngày sinh nhật của anh ta). –

+0

Viết một trình trợ giúp cho điều đó, nhưng vì đó là một thao tác trên dữ liệu bạn nên thực hiện nó trong phần afterFilter() của IMO mô hình. Tôi có thể hỏi bạn tại sao bạn đánh dấu câu trả lời nghèo nàn, điều đó chỉ trả lời một trong những điểm của bạn, đúng không !? – burzum

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