Tôi bắt đầu sử dụng CakePHP (1.2) vài tháng trước để thêm các tính năng nhỏ vào ứng dụng của công ty và tôi không quá quen thuộc với nó.Công việc cúp CakePHP để gọi hành động của bộ điều khiển
Chúng tôi thử nghiệm cục bộ trên máy chủ phát triển trước khi hợp nhất với máy chủ sản xuất.
Tôi muốn một hành động điều khiển được gọi mỗi giờ với những gì tôi cho là cách tốt nhất để làm điều này thông qua các nghiên cứu của tôi, một công việc cron.
Cố gắng 1
Sau khi đọc những,
http://book.cakephp.org/1.2/en/view/110/Creating-Shells-Tasks
tôi có thể thực hiện một cái gì đó mà không có lỗi, nhưng hành động không được thực thi.
Dựa trên những ví dụ, tôi đã thêm một file có tên cron_dispatcher.php trong thư mục ứng dụng của tôi (không phải app/webroot) và sau đó đã lệnh này từ dir ứng dụng
php cron_dispatcher.php/controller/action/param
Vẫn không có gì xảy ra nhưng nó hoạt động hoàn hảo khi tôi gọi nó thông qua url.
Cố gắng 2
tôi đã cố gắng tạo ra một vỏ (email.php) mà sẽ gọi hành động trong/app/nhà cung cấp/vỏ /.
<?php
class EmailShell extends Shell {
public function main() {
$this->out('Test');
}
}
?>
này kết quả đầu ra thành công thử nghiệm trong giao diện điều khiển sử dụng email
bánh chính
nhưng sau đó tôi không thể tìm thấy làm thế nào để gọi hành động của bộ điều khiển. Tôi đã thử
$ this-> requestAction ('/ controller/action');
Tôi cũng đã cố thực hiện cuộc gọi từ một chức năng khác với hàm chính trong trình bao.
Tôi đã cố gắng để bao gồm bộ điều khiển trong $ sử dụng biến như tôi làm với một mô hình nhưng điều đó không làm việc (và nó không có ý nghĩa I think)
Tôi không nghĩ rằng việc tạo ra một nhiệm vụ là giải pháp hoặc là tôi không muốn lặp lại các chức năng sendEmails do đó tại sao tôi đang tìm kiếm một cách để chỉ cần gọi hành động của bộ điều khiển từ một vỏ hoặc bất cứ điều gì!
Có lẽ một số lý thuyết tôi đang mất tích, nhờ
Giải pháp
tôi chuyển một số phương pháp từ bộ điều khiển đến một mô hình và tôi đã có thể gọi cho họ từ một vỏ.
App::import('Component', 'Email');
class SendMemosShell extends Shell {
var $uses = array(
'Memo',
);
public function main() {
}
public function sendEmails() {
$this->Email =& new EmailComponent(null);
$memoList = $this->Memo->getMemos();
//...
}
}
Liên kết này giúp http://book.cakephp.org/2.0/en/console-and-shells/cron-jobs.html
chỉnh sửa: làm rõ một số thông tin và bổ sung các giải pháp
Tôi cũng cần có thể gọi hành động này theo cách thủ công (bằng cách nhấp vào nút trong chế độ xem chẳng hạn). Bạn có đề nghị tôi tạo một nhiệm vụ thay vì một hành động điều khiển và gọi thay thế này (tự động với một công việc cron và tự bấm vào)? Là một cái gì đó vỏ bạn gọi hoàn toàn tách ra từ logic hoặc bạn đã nói về hàng đợi? Đôi khi tôi cần phải gửi nhiều email cùng một lúc (khi nó được kiểm tra tự động) nhưng nó không nên xảy ra quá thường xuyên vì vậy tôi tự hỏi nếu hàng đợi là một chút quá phức tạp cho nhu cầu của tôi! Cảm ơn câu trả lời của bạn – Catherine
Đã trả lời chúng, nói chung bạn nên nghĩ về kích thước của ứng dụng và thiết kế của ứng dụng. Cách tôi trả lời câu hỏi của bạn là một trong những cách nó nên được thực hiện. Không có nghĩa đó là cách tốt cho kinh doanh. Nếu bạn chỉ gửi thư đôi khi nó không phải là giá trị có thể để tạo ra một thiết lập đầy đủ và phức tạp hơn cho nó. –
Xin chào một lần nữa, cảm ơn câu trả lời chi tiết của bạn. Chúng tôi đồng ý rằng không cần gửi email theo cách thủ công nên tôi đã tạo một trình bao gửi email. Nó cũng buộc tôi phải di chuyển nhiều phương pháp từ bộ điều khiển sang mô hình phù hợp hơn nếu tôi hiểu rõ. Sau đó tôi làm theo quy trình này để thiết lập công việc cron: http://book.cakephp.org/2.0/en/console-and-shells/cron-jobs.html Tôi quyết định không sử dụng hàng đợi mặc dù điều này có vẻ thú vị vì nó không đáng giá trong trường hợp này! – Catherine