2010-08-16 4 views
8

Thực hành tốt nhất cho việc sắp xếp các hàm được sử dụng trên nhiều lớp MVC là gì?Các chức năng Symfony "toàn cầu" nên được đặt ở đâu?

Gần đây tôi đã phải viết một số hàm thống kê được sử dụng cả trong Chế độ xem và Mô hình. Nếu tôi đặt chúng trong một helper, tôi đang gặp khó khăn khi tải các trình trợ giúp trong lớp mô hình, điều này gây phiền toái, có vẻ không chính xác, và ngắt hoàn toàn khi các hàm đó được gọi từ một nhiệm vụ (vì không có ngữ cảnh mặc định). Nếu tôi đặt chúng trong thư mục lib cấp cao nhất, tôi đang mắc kẹt thực hiện các cuộc gọi như Stats::normalPercentile trong chế độ xem.

Có tùy chọn nào khác không? Có bất kỳ ý kiến ​​nào từ Symfony devs về nơi các chức năng như thế này nên được đặt?

Chỉnh sửa: Rõ ràng không có vấn đề gì khi thực hiện cuộc gọi tĩnh trong chế độ xem. Tôi suy ra điều này dựa trên Symfony không viết những người trợ giúp của họ như là các lớp học (ngay cả sau significant discussion.) Trong trường hợp đó, có bất kỳ quy ước nào để đặt các tệp như thế này không? Chỉ cần ném chúng trong lib/util?

Trả lời

7

Về chỉnh sửa của bạn, người trợ giúp của symfony được viết như thế để tránh làm xáo trộn chế độ xem với cú pháp có thể không quen thuộc với những người ít kỹ thuật hơn, thường tiếp xúc với một chút chức năng PHP là công dân hạng nhất trong 'vanilla' PHP . Đó là một triết lý được rút ra từ Ruby on Rails, lấy cảm hứng từ phần này của khung công tác.

Lưu trữ tệp trong lib/ là sở thích cá nhân vì symfony không thực sự quan tâm, nhưng danh pháp sẽ đề xuất lib/vendor/yourname.

Nếu đó là mã tốt, bạn có thể muốn bảo vệ nó ghen ở chỗ ít yourname thư mục ... nếu nó thực sự mã tốt, bạn có thể muốn package it and share it with others :)

1

Có gì sai với cuộc gọi tĩnh? Tôi nghĩ rằng nó hoàn hảo cho các chức năng trợ giúp (tốt hơn so với các chức năng như bạn có một loại không gian tên).

Thật lạ khi thu thập số liệu thống kê trong một chế độ xem. Tại sao bạn không làm điều đó trong một hành động?

Có thể câu trả lời đúng tùy thuộc vào loại vấn đề bạn đang cố gắng giải quyết (bạn không giải thích chính xác những người giúp đỡ của bạn nên làm gì). Tôi thường sử dụng những người trợ giúp như vậy cho các tác vụ phổ biến mà không yêu cầu bất kỳ lớp hoặc cuộc gọi bổ sung nào (như "stripText").

+0

Tôi đồng ý: không có gì sai với các cuộc gọi tĩnh trong chế độ xem. Nếu OP không thích nó, anh ta sẽ tạo ra một người trợ giúp che giấu chúng. – Maerlyn

+0

Tôi không thu thập số liệu thống kê trong chế độ xem, nhưng tôi đang tính toán như phần trăm của một giá trị. Tôi đoán tôi phỏng đoán (không chính xác) các cuộc gọi tĩnh bị cau mày khi xem vì Symfony không đặt người trợ giúp của họ vào trong các lớp. –

0

Tính toán thống kê không thuộc Chế độ xem. Xem xét thêm chúng vào lớp Model. lib/util hoặc lib/model có vẻ ổn cả với tôi. Ví dụ, bạn có thể có một lớp PercentileSequence mà ăn với dữ liệu có thể được tái sử dụng trong cả hai quan điểm và nhiệm vụ của bạn như thế này:

// in your action, component or task 
$this->mySequence = new PercentileSequence($data); 

// in your view (if PercentileSequence implements Iterator) 
<?php foreach ($mySequence as $rank): ?> 
    <?php echo $rank ?> 
<?php endforeach; ?> 
// or use plain old array 
<?php foreach ($mySequence->getRanks() as $rank): ?> 
    <?php echo $rank ?> 
<?php endforeach; ?> 

Nó nên là cùng trong một nhiệm vụ.

+0

Vui lòng không tranh luận cơ sở của câu hỏi. Bạn có thể quan niệm về một hàm cần được gọi cả trong mô hình và khung nhìn không? Tốt. Đó là những gì tôi đang nói ở đây.Quibbling hơn cho dù * ví dụ cụ thể này * là một trong số họ là làm giảm từ câu hỏi của tôi. –

+0

Có lẽ đây là lý do tại sao bạn bị kẹt với việc tải những người trợ giúp trong lớp Mô hình hoặc gọi các phương thức tĩnh :) Dù sao, tôi đã bỏ phiếu cho câu hỏi của bạn. Tôi hy vọng ai đó sẽ đến với một câu trả lời tốt. – lunohodov

+0

Phản ứng ban đầu của tôi hơi thô lỗ. Vấn đề này là một con thú cưng của tôi. Hãy tin tôi rằng những gì tôi đang làm ở đây là phù hợp và cần thiết :) –