2012-03-19 32 views

Trả lời

25

Có thể nhưng khá thực hành xấu trong một khuôn khổ MVC. Bạn nên suy nghĩ lại và tổ chức lại mã của mình nếu bạn cho rằng mình cần sử dụng thành phần đó trong một mô hình vì một cái gì đó rõ ràng là sai rồi.

Một thành phần được cho là chia sẻ mã giữa các bộ điều khiển, chỉ giữa các bộ điều khiển.

Để chia sẻ tái sử dụng mã giữa mô hình nó sẽ là một hành vi. Đối với một cái nhìn nó sẽ là một người trợ giúp.

Nếu bạn có một số mã thực sự chung chung, nó phải là một lib hoặc đặt nó trong thư mục Utility/namespace hoặc tạo một không gian tên mới. Kiểm tra các lớp học hiện có ở đó để có được một ý tưởng những gì để đưa vào đó.

Không có mã nào được cung cấp để không thể đưa ra bất kỳ đề xuất thực sự nào về cách tái cấu trúc nó. Tuy nhiên, cách bạn muốn sử dụng mã hiện tại sẽ không hoạt động trong ngữ cảnh MVC, do đó hãy dành thời gian để suy nghĩ lại cách tiếp cận của bạn về bất cứ điều gì bạn cố gắng làm.

+6

và nó được sử dụng ở những nơi khác nhau, nó sẽ được tổ chức tốt nhất như Lib – mark

10

Có thể sử dụng một thành phần bên trong một mô hình (nhưng tôi không thể nhận xét nếu điều này được khuyến nghị hoặc thực hành tốt nhất).

Lấy cảm hứng từ original source, một ví dụ sử dụng một thành phần được gọi là ‘Geocoder’ trong một mô hình:

App::import('Component','GeoCoder'); 
$gc = new GeoCoderComponent(new ComponentCollection); 

Sau đó, bạn có thể sử dụng $gc để gọi các chức năng của các thành phần.

-

P.S .: Tôi không muốn khuyến khích thực hành lập trình xấu, nhưng đôi khi áp lực của thời hạn (trong các dự án thực tế) có thể buộc một nhà phát triển để đưa ra quyết định như vậy.

+0

Một số thời gian của chúng tôi senour cũng áp lực chúng tôi vì thay dont biết những gì là mvc vòm (tôi nghĩ). – Debasis

+2

"Thời hạn" là * rất xấu * lý do không viết mã thích hợp. Đó là không có gì đòi hỏi "công việc" chỉ cần đặt nó vào đúng nơi. Không làm điều đó đúng là chơi Jenga: Di chuyển mã xung quanh và đống lên crap cho đến khi nó bị treo.Đó là một vài phút di chuyển mã ở đúng nơi ngoại trừ toàn bộ "kiến trúc" đã hoàn toàn hơi say. Bạn sẽ chỉ kết thúc với một mớ hỗn độn không thể duy trì mà sẽ trở nên khủng khiếp đắt tiền để duy trì và gỡ lỗi tại một số điểm. – burzum

+0

Bạn nhầm lẫn ý định của tôi. Tôi đã từng đọc Code Complete 2 ở đại học, vì vậy tôi sẽ viết mã tốt hơn một cách chuyên nghiệp. Tôi đọc các tiêu chuẩn PSR trong thời gian riêng, để tôi có thể thực hiện chúng trong công việc hàng ngày của tôi. Tôi hy vọng tôi đang làm rõ nơi tôi đến từ - Tôi là một 'lập trình viên cầu toàn OCD', và tôi sẽ không _knowingly_ cắt góc với mã của tôi. Tôi học điều gì đó mới hàng ngày, và nhiệm vụ tương tự mà tôi làm sáu tháng sau sẽ hiệu quả hơn, điều này tôi chấp nhận. –

-1

@ AD7six

// Use anywhere 
AuthComponent::user('id') 

// From inside a controller 
$this->Auth->user('id'); 

Từ các tài liệu bánh PHP mà họ cung cấp AuthComponent::user('id') để nó có thể được sử dụng ở những nơi khác hơn là một bộ điều khiển.

Có lẽ tôi cần gợi ý lớn hơn, nhưng tại sao mô hình của tôi không thể truy cập thông tin ACL?

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