2010-06-15 37 views
5

Tôi lập trình trang web PHP thực sự đầu tiên của mình và tôi tự hỏi làm cách nào để làm cho mã của tôi dễ đọc hơn đối với bản thân mình. Cuốn sách tham khảo tôi đang sử dụng là PHP và Phát triển Web MySQL lần thứ 4.Tách trình bày và logic nghiệp vụ trong PHP

Cuốn sách nói trên đưa ra ba phương pháp để tách logic và nội dung:

  • bao gồm các file
  • hàm hay lớp API
  • hệ thống mẫu

tôi đã không chọn bất kỳ của các Tuy nhiên, như gói não của tôi xung quanh những khái niệm này là mất một thời gian. Tuy nhiên, mã của tôi đã trở thành một số lai của hai đầu tiên như tôi chỉ cần sao chép-dán đi đây và sửa đổi khi tôi đi.

Về mặt trình bày, tất cả các trang của tôi đều có các yếu tố chung: tiêu đề, điều hướng trên cùng, điều hướng thanh bên, nội dung, thanh bên phải và chân trang.

Ví dụ dựa trên chức năng trong sách đề xuất rằng tôi có thể có các chức năng hiển thị này xử lý tất cả ví dụ trình bày. Vì vậy, mã trang của tôi sẽ như thế này:

display_header(); 
display_navigation(); 
display_content(); 
display_footer(); 

Tuy nhiên, tôi không thích điều này vì các ví dụ trong cuốn sách có các báo cáo in với HTML và PHP lẫn lộn như thế này:

echo "<tr bgcolor=\"".$color."\"><td><a href=\"".$url."\">" ... 

Tôi muốn có HTML với một số PHP ở giữa, chứ không phải theo cách khác.

Tôi đang nghĩ đến việc tạo trang của mình để ở đầu trang, tôi sẽ tìm nạp tất cả dữ liệu từ cơ sở dữ liệu và đặt nó vào mảng. Tôi cũng sẽ lấy dữ liệu cho các biến. Nếu có bất kỳ lỗi nào trong các quy trình này, tôi sẽ đặt chúng vào các chuỗi lỗi.

Sau đó, tại mã HTML, tôi sẽ lặp qua các mảng này bằng cách sử dụng foreach và hiển thị nội dung. Trong một số trường hợp, sẽ có một số biến sẽ được hiển thị. Nếu có một biến lỗi được thiết lập, tôi sẽ hiển thị nó ở vị trí thích hợp.

(Như một mặt lưu ý: Điều tôi không hiểu là tại hầu hết các mã ví dụ, nếu một số truy vấn cơ sở dữ liệu hoặc không có điều gì mang lại cho một lỗi, luôn luôn có:

else echo 'Error'; 

này baffles tôi, bởi vì khi mã ví dụ đưa ra lỗi, đôi khi nó được lặp lại ngay cả trước khi HTML đã bắt đầu ...)

Đối với những người đã sử dụng ASP.NET, tôi đã quen một chút với các tập tin mã và lblError và tôi đang cố gắng làm một cái gì đó tương tự ở đây. Điều tôi chưa biết là làm thế nào tôi có thể làm điều này "làm logic đầu tiên, sau đó trình bày" điều để tôi sẽ không phải sao chép ví dụ như logic chuyển hướng và trình bày chuyển hướng trong tất cả các trang.

Tôi có nên thực hiện một số tệp bao gồm hoặc tôi có thể sử dụng các chức năng ở đây nhưng hơi khác một chút không? Có bất kỳ bài viết hay nào mà những "phong cách" này về cách phân tách bản trình bày và logic được giải thích kỹ lưỡng hơn một chút. Cuốn sách tôi chỉ có một đoạn về công cụ này.

Điều tôi đang nghĩ là tôi đang nói về một số khái niệm hoặc cách lập trình PHP ở đây, nhưng tôi chưa biết các điều khoản cho chúng.

Tôi biết đây không phải là một câu hỏi thẳng về phía trước, tôi chỉ cần một số trợ giúp trong việc tổ chức suy nghĩ của mình.

+0

Điều tốt không ai đề cập đến heredocs. Đối với một số lý do mỗi khi có một câu hỏi để tách logic và trình bày, một người nào đó đề cập đến heredocs và nó nhận được một số tiền vô lý của upvotes. –

Trả lời

4

Never echo ra HTML với PHP. Thay vì viết nó inline (mà không cần thẻ ngắn ác) như

<tr class="<?php echo $myclass; ?>">

Các tùy chọn khác giúp đỡ để tách ra logic/xem sẽ được sử dụng PHP Framework như CodeIgniter.

Tôi sẽ bỏ cuốn sách và thay vào đó tập trung hơn vào việc học các kỹ năng PHP cốt lõi như chức năng, lớp học, v.v. Sau đó, bắt đầu chơi several popular frameworks ngoài đó.

Như một mặt lưu ý: Điều tôi không hiểu được rằng trong hầu hết các ví dụ mã, nếu một số truy vấn cơ sở dữ liệu hoặc không có điều gì mang lại cho một lỗi, có luôn:

Đó là bởi vì họ đang hiển thị các lỗi không chính xác. Bạn nên lưu trữ các lỗi trong một sesssion và sau đó hiển thị chúng trên trang (thanh toán bù trừ chúng) hoặc ném chúng vào nhật ký lỗi với chức năng error_log. error_log("Something happened in MyClass");

Điều tôi đã không tìm ra được cách tôi có thể làm được điều này "làm luận đầu tiên, sau đó trình bày" điều vì vậy mà tôi sẽ không cần phải sao chép ví dụ logic chuyển hướng và điều hướng trình bày trong tất cả các trang.

Nghĩ về mọi thứ theo cách tiếp cận MVC. Bạn gọi bộ điều khiển (logic) trước. Nó chỉ ra những gì cần thiết. Nếu nó cần dữ liệu từ cơ sở dữ liệu, nó sẽ gọi một Model và yêu cầu nó. Sau đó, nó định dạng nó, thêm dữ liệu khác, chạy các truy vấn bổ sung, và sau đó chuyển nó tới khung nhìn.

+1

Cảm ơn rất nhiều cho đầu vào về lỗi và tiếng vọng. Tôi đã xem xét các trang CodeIgniter và tôi thích ý tưởng của MVC, nhưng nó đã có một chút quá nhiều cho tôi để hiểu được chưa. Đó là lý do tại sao tôi hy vọng tìm cách để làm việc một cách khôn ngoan với chỉ PHP. –

+1

@Markus: Sau đó sử dụng bao gồm ở đầu trang. Nếu một trang có logic (đầu vào biểu mẫu, công việc cơ sở dữ liệu, v.v.) thì hãy thử gắn tất cả trang logic và sử dụng '$ _SESSION' cùng với các chuyển hướng để cung cấp luồng hình ảnh. –

1

âm thanh như một công cụ mẫu là những gì bạn đang tìm kiếm - yêu cầu google cho rất nhiều kết quả. cá nhân, tôi thích smarty rất nhiều.

(và vứt bỏ cuốn sách đó, âm thanh như đó là ... cũ)

+0

Oh yeah. Bây giờ tôi nhìn vào câu hỏi của mình và nhìn vào Smarty, có vẻ như tôi đã làm rất nhiều thứ giống như tôi đang nghĩ đến. Tuy nhiên, tôi tự hỏi liệu tôi có cần thông minh hay không nếu tôi có thể làm mọi thứ theo cách "thông minh". –

1

MVC (Trình điều khiển chế độ xem mô hình) có vẻ như nó có thể phù hợp với nhu cầu của bạn. Bạn có thể đọc về điều đó here.

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