2009-04-05 10 views
8

Tôi đang sử dụng Kohana nhưng câu hỏi này áp dụng cho Rails, CI hoặc bất kỳ khung phát triển web MVC nào khác. Đâu là nơi tốt nhất để gắn các script AJAX phía máy chủ của mình?Kohana - bạn đặt kịch bản AJAX ở đâu?

Tôi đã lập kế hoạch khi tạo Ajax_Controller và sử dụng phương pháp/hành động cho mỗi tập lệnh riêng lẻ.

Ví dụ, một mẫu đăng nhập trên trang chủ index.php/home sẽ gửi một XMLHttpRequest để index.php/ajax/login, và chỉnh sửa hồ sơ dạng index.php/profile/edit sẽ gửi một XMLHttpRequest để index.php/ajax/editprofile. Thực hành tốt nhất là gì?

Trả lời

1

Tôi không sử dụng Kohana nhưng những gì tôi làm trong khuôn khổ của tôi là các kịch bản AJAX là bộ điều khiển. Tôi cố gắng coi chúng là bộ điều khiển độc lập nhưng cuối cùng chúng chỉ là bộ điều khiển.

5

Bạn có thực hiện các bộ điều khiển khác nhau cho các yêu cầu GET và POST không? Tôi không. Theo ý kiến ​​của tôi, các yêu cầu JS cũng không nên được xử lý theo cách khác.

Cá nhân tôi thấy các yêu cầu JS giống như GET, POST hoặc bất kỳ loại yêu cầu nào khác. Vì vậy, nếu tôi có các hành động dựa trên JS liên quan đến người dùng, tôi chỉ cần tạo chúng trong bộ điều khiển người dùng.

9

Tôi có xu hướng đặt các hành động ajax của tôi trong cùng một bộ điều khiển như các hành động không phải là ajax cho bất kỳ mô hình cụ thể nào.

Khi có thể, tôi cố gắng sử dụng các tác vụ tương tự và chỉ thay đổi loại kết xuất. Hầu hết các tác vụ phải có phiên bản không phải là ajax, vì vậy, điều này có xu hướng hoạt động khá tốt. Rất tiện dụng để giảm sự trùng lặp logic.

+1

@Mario dường như đồng ý. Điều đó được tính là sự đồng thuận? –

+0

thực sự, không thay đổi các bộ điều khiển, các hành động là như nhau. Chỉ cần thay đổi quan điểm của bạn (cho phép xem AJAX trả về JSON hoặc cái gì đó và chế độ xem "bình thường" html) –

+0

Thông tin thêm về nhận xét của Pim .. http://docs.kohanaphp.com/helpers/request#is_ajax sẽ giúp bạn ở đây. – Louis

1

Sử dụng bộ điều khiển riêng là một ý tưởng hay. Tôi hoặc tổ chức các bộ điều khiển của tôi theo chức năng và sau đó hành động theo kiểu trả về.

Ngoài ra, khi tôi đang sử dụng giá treo, tôi có thể trang trí một hành động với @jsonify và điều đó sẽ tự động xử lý việc chuyển đổi các đối tượng python sang JSON. Rất tiện dụng.

2

Nếu bạn có nghĩa là các tập lệnh AJAX (Javascript), chúng sẽ được chuyển vào thư mục public/js của bạn. Tuy nhiên, nếu bạn có nghĩa là các hành động được gọi bởi các yêu cầu AJAX này, chúng sẽ được coi là bất kỳ hành động nào khác của các bộ điều khiển tương ứng. Để hoàn toàn RESTful, bạn nên sử dụng một định dạng khác (json, xml, vv) làm giá trị trả lại cho những hành động đó.

7

AJAX vượt qua tất cả các ranh giới MVC. Đó là, nó không đi vào chỉ là một trong những mô hình, xem hoặc điều khiển.

  • script AJAX của bạn sẽ được gọi tập lệnh trên trang web của bạn - vì vậy đây sẽ bao gồm một phần của khiển lớp của bạn mà bạn đã tạo ra cho mục đích này.
  • Bộ điều khiển đó sẽ lần lượt truy cập cơ sở dữ liệu bằng giao diện được cung cấp bởi lớp mô hình của bạn, giống như yêu cầu không phải AJAX.
  • Dữ liệu cho phản hồi cho khách hàng có thể được đóng gói dưới dạng JSON hoặc XML hoặc một thứ gì đó.Về mặt kỹ thuật, đây là nhiệm vụ của lớp xem của bạn, mặc dù định nghĩa của lớp ứng dụng của bạn không phải là "hệ thống tạo mẫu HTML" thay vì "xử lý và định dạng mọi thứ được gửi lại cho khách hàng cho dù đó là HTML hay gì đó khác như XML "thì thế hệ XML hoặc JSON của bạn có thể cần phải đi vào một phần mới của riêng nó.

Đối với việc gửi các kịch bản (file Javascript) bản thân, điều này có lẽ sẽ được xử lý trực tiếp bởi các máy chủ web chứ không phải từ bên trong khung MVC của bạn.

1

Tôi muốn giữ tất cả các yêu cầu ajax của tôi trong một bộ điều khiển, thường cử các yêu cầu của họ thông qua một mô hình chia sẻ (mà bộ điều khiển ajax không còn sử dụng)

Sự khác biệt chính là quan điểm cho rằng kết quả thông qua bộ điều khiển ajax (các đoạn html, dữ liệu json, v.v. hoặc bộ điều khiển không phải là ajax (các trang đầy đủ)

0

Bạn có thể bọc nó thành một REST-api chung và sử dụng các quy ước và URI của RESTful. Ví dụ:

Thay vì index.php/ajax/editprofile, nó có thể là yêu cầu PUT tới index.php/api/profile/profilename.

2

Tôi là một Noob, nhưng dựa trên sự hiểu biết của tôi, để đạt được ajax với php MVC ... suy nghĩ bước có thể là:

  • thay đổi định nghĩa/chức năng của lớp xem php hiện tại từ 'mẫu HTML 'thành' kết quả định dạng (XML, JSON vv .. '-> kết quả từ mô-đun có liên quan, sau đó được gọi bởi bộ điều khiển để xuất thành đối tượng AJAX, sau đó có nghĩa là bạn cần phải viết các lớp xem vào mỗi lớp cụ thể với các phương thức định dạng
  • Lớp mô-đun PHP vẫn giữ nguyên
  • tạo một lớp bộ định tuyến Ajax với JS giữ nguyên cấu trúc tương tự mà bạn định tuyến trong yo ur PHP
  • xây dựng lớp xử lý kết quả ajax với JS để xử lý các kết quả thu được từ các bộ điều khiển PHP (XML JSON, v.v.), sau đó từ bất kỳ tương tác người dùng nào bạn muốn, điều này sẽ được gọi bởi lớp bộ định tuyến Ajax

Vì vậy,

ajax router (send XMLhttprequest) 
-> PHP controllers C 
-> PHP module -> PHP view results M 
-> PHP controllers output results V 
-> ajax results handle (into page)