2010-07-13 18 views
8

Tôi vừa định dạng lại bố cục mặc định của ứng dụng CakePHP của mình. Tôi loại bỏ càng nhiều html trong dòng càng tốt bằng cách đặt gần như tất cả mọi thứ bên trong các phương thức trợ giúp html.Đây có phải là quá mức cần thiết hoặc sử dụng tốt trình trợ giúp HTML của CakePHP không?

Thật thú vị, nhưng tôi tự hỏi mình có được lợi ích gì từ bài tập này, nếu có?

<?php 
    $output = implode("\n", array(
     $html->docType(), 
     $html->tag('html', implode("\n", array(
      $html->tag('head', implode("\n", array(
       $html->charset(), 
       $html->tag('title', 'Title For App'), 
       $html->css('css', NULL, array('media' => 'screen,print')), 
       $html->css('print', NULL, array('media' => 'print')), 
       $html->script(array('cufon', 'jquery','external')) 
      ))), 
      $html->tag('body', implode("\n", array(
       $html->tag('div', $content_for_layout, array('id' => 'wrapper')), 
       $html->scriptBlock('Cufon.now();') 
      ))) 
     )), array('xmlns' => 'http://www.w3.org/1999/xhtml')) 
    )); 
    echo $output; 
?> 

Tôi cho rằng ít nhất nó trông đẹp và nhỏ gọn và dễ đọc. Tôi nên biết những cạm bẫy nào trong kịch bản này? Tôi có nên biết về bất kỳ vấn đề tốc độ nào không?

Tôi thích nó — và tôi thì không.

Tôi đoán tôi cần thuyết phục theo cách này hay cách khác.

Nếu bạn đang băn khoăn, các implodes đặt ngắt dòng tốt đẹp trong html khi xem nguồn.

+4

Bạn biết điều gì sẽ sạch hơn, nhanh hơn và ngắn gọn hơn không? HTML thẳng. Tôi không thể tuân thủ loại thay thế cú pháp 1 đến 1 này. Viết HTML của bạn bằng HTML. Đừng giở giày ở giữa người đàn ông vì mục đích tránh các thẻ '' đáng sợ. – meagar

+1

Vâng, tốc độ là không có vấn đề. Tôi gói mã trong các cuộc gọi microtime và khung nhìn hiển thị trong 0,00459 giây. – Stephen

+0

Ngay lập tức bạn cần phải sử dụng bất kỳ điều khiển luồng nào quan trọng hơn một bộ ba, bạn (để sử dụng thuật ngữ kỹ thuật) hoàn toàn được khoanh vùng. –

Trả lời

10

Tôi đã thảo luận này trong nhóm Google vài năm trước. Cuối cùng, bạn sẽ nhận ra rằng nó không tạo ra nhiều khác biệt theo cách bạn làm điều đó cho đến khi bạn cần thao tác theo chương trình - sau đó, nếu bạn đã đi đường HTML, bạn sẽ tìm thấy mã của mình được trang bị <?php & ?> hoặc nối chuỗi hoặc thay thế biến trích dẫn kép.

Hiện tại, nhiều ứng dụng nằm trong dòng, tôi thích duy trì những ứng dụng có trợ giúp nhiều hơn đánh dấu.

Có rất nhiều HTML không được người trợ giúp bảo vệ, vì vậy bạn không thể tránh sự pha trộn, nhưng bạn có thể giảm thiểu sự phức tạp và nhầm lẫn bằng cách sử dụng người trợ giúp bất cứ khi nào có thể. Khi bạn bắt đầu sử dụng biểu mẫu, bạn sẽ nhận được rất nhiều thứ bảo mật được ném vào và ID và NAME được định dạng theo cách CakePHP thích.

PHPCakePHP được tạo cho mục đích này. Tại sao chỉ sử dụng nửa ngôn ngữ hoặc nửa khung?

+0

Điều đó đã bán tôi. Cảm ơn! – Stephen

+1

Phân tách mã của bạn bằng '' là PHP là gì: Đây là một hệ thống mẫu. Chỉ cần giữ logic điều khiển riêng biệt với logic hiển thị của bạn và các tệp mẫu của bạn sẽ tự nhiên vẫn khá sạch sẽ. – meagar

+2

Xin lỗi, meagar, nhưng tôi không đồng ý với bạn. Thao tác cách dữ liệu được xem là vốn có của Chế độ xem. Sự trung thành còn lại đối với kiến ​​trúc MVC không hàm ý các khung nhìn không có mã. Giữ logic nghiệp vụ ra khỏi chế độ xem, bằng mọi cách ... nhưng sắp xếp, ghép nối, lật và thao tác cách bạn muốn XEM dữ liệu của mình trong VIEW. – Stephen

1

Lập trình, điều này rất chính xác, bởi vì bạn chưa bao giờ thực sự tạo chuỗi. Điều tốt đẹp là vì mọi thứ đều là một hàm, bạn có thể truyền tất cả các tham số cho nó, và đẩy tất cả các logic tới các bộ điều khiển của bạn. Vì vậy, tiêu đề của bạn, chẳng hạn, có thể được tạo động cho mỗi trang và sau đó được chuyển đến cuộc gọi $html->tag('title', 'Title For App') của bạn.

Tuy nhiên, do số lượng cuộc gọi hàm tuyệt đối, tôi nghi ngờ nó sẽ không hoạt động tốt như chỉ sử dụng PHP để lặp và lặp lại các biến.

+0

Sự phức tạp của thao tác dữ liệu có thể dễ dàng được trao cho các thành phần hoặc bởi một trình trợ giúp tùy chỉnh. Tôi đã làm việc như thế này gần đây và tôi phải nói - đối với một người thay vì sẽ viết php hơn html - điều này có vẻ dễ dàng hơn để duy trì. –

8

Lợi ích không thể phủ nhận của điều này là 100% cú pháp chính xác, vì bạn đã loại bỏ bất kỳ khả năng nào có thể làm mất chất béo và thiếu thẻ mở/đóng. Những gì tôi có thể nói với bạn từ kinh nghiệm mặc dù là nửa năm kể từ bây giờ, sẽ khó gấp đôi để đọc và sửa đổi cấu trúc này. Nó cũng thực sự khó khăn để chèn các yếu tố có điều kiện. Bạn sẽ cần phải sử dụng toán tử ternary ở đây, điều này làm cho mọi thứ thậm chí còn dễ đọc hơn.

Nói chung, tôi khuyên bạn nên sử dụng kết hợp HTML/PHP truyền thống.

3

Bằng cách sử dụng những người giúp đỡ bạn, theo cách nào đó, trong tương lai sẽ kiểm chứng mã của bạn. Vì vậy, khi HTML5 xuất hiện và các thẻ html hoặc head thay đổi trong thông số mới. Về mặt lý thuyết, bạn chỉ cần thay đổi lớp trợ giúp html của bạn và tất cả đánh dấu của bạn là HTML5.

Tuy nhiên, ngược lại, bạn cũng dựa vào Bánh để tạo thẻ được định dạng tốt. Mặc dù rất nhiều các khung công tác này có đầy đủ ngăn xếp, nhưng chắc chắn có một số khu vực mà chúng xử lý tốt hơn các khu vực khác. Bạn không nên mong đợi họ thiết lập toàn bộ bộ thẻ HTML.

Cá nhân tôi nghĩ rằng nó quá mức cần thiết để làm những gì bạn đã làm. Tôi thích sử dụng trình trợ giúp HTML cho các liên kết, url và các tệp được bao gồm vì lợi ích ánh xạ thư mục. Nhưng tôi không sử dụng những người trợ giúp để tạo ra một thẻ đơn giản div.

4

Cá nhân tôi xung đột về vấn đề này, nhưng tôi chọn chế độ HTML + PHP khi làm việc với PHP. Tôi có thể thấy những lợi thế của một trong hai, nhưng đây là lý do tại sao tôi chọn HTML + PHP:

  1. PHP là ngôn ngữ templating - tốt nhất. Là một ngôn ngữ tạo khuôn mẫu, tôi cảm thấy nó vượt trội hơn bất kỳ ngôn ngữ lập trình PHP nào khác, và nhiều ngôn ngữ tạo khuôn mẫu trong các khuôn khổ web ngôn ngữ khác cho sự linh hoạt và sức mạnh của nó.

    Nếu tôi đang làm việc với một ngôn ngữ như Python hoặc Java, tôi có thể thích biểu mẫu bạn đề xuất hơn - nhưng đó không phải là giải pháp hoàn hảo khi làm việc với PHP.

  2. Bạn mất khả năng sử dụng nhiều công cụ đã được phát triển để làm việc với chính HTML. Bạn đặc biệt mất đi những người cảm thấy thoải mái với việc sửa đổi HTML và những người có thể tự tạo ra những thay đổi đơn giản trong chính các khung nhìn đó.

  3. Tính linh hoạt tuyệt đối mà không cần thêm nhiều lớp API hơn.

Là một tác dụng phụ của điều này, tôi có xu hướng sử dụng for():endfor; cú pháp, vv, và phấn đấu để các thẻ HTML không bao giờ echo - Tôi sẽ tái cơ cấu để tránh nó (ví dụ, không sử dụng phương pháp trừ khi bên trong một helper vv, trong trường hợp này, tôi sẽ tạo các thẻ của mình với Trình trợ giúp Html, vì nó chỉ câm khi tìm kiếm súp HTML bên trong một lớp hoặc hàm PHP: P).

+0

Tôi chấp nhận câu trả lời của Leo từ lâu, nhưng kể từ đó tôi đã chuyển sang làm chính xác những gì bạn mô tả ở đây. Tôi sử dụng Trình trợ giúp HTML của CakePHP trong các phương thức và HTML thuần túy trong các mẫu (ngoại trừ các thứ "động" như liên kết.Sử dụng trình trợ giúp HTML cho các liên kết giúp tôi không phải thay đổi tất cả các chế độ xem của mình khi định cấu hình các tuyến mới). – Stephen

+0

Ah, tôi nên có đề cập rằng tôi sử dụng Form và Html Helpers trong quan điểm của tôi thay vì tự tạo ra các hình thức và liên kết. Ngoài ra, hàm __() cho i18n. – Iiridayn