你的控制器不應該做任何這些事情。您的控制器只應接受來自用戶界面的任何輸入,然後決定將其委託給模型中的相應類。
如果您有一個ReportController,請讓它接受任何輸入並將其轉發給負責生成報告的模型中的ReportsService或其他內容。控制器不負責生成它們。
它應該是這個樣子:
public function generateReportAction()
{
try {
$service = new Model_ReportService;
$service->setReportToGenerate($this->getRequest()->getParam('reportId'));
$this->view->report = $service->generateReport();
} catch (ReportException $e) {
// do something with $e
}
}
如果您ReportService的需要生成多份報告,改變ReportService的,所以它知道該怎麼做。你可以這樣做
$service = new Model_ReportService;
$service->setModulesDirectory('something');
$this->view->reports = $service->generateReportsForModules();
個人而言,我不認爲一個ReportService的應該需要知道的關於模塊目錄,所以你會想給該服務更有些人認爲的公共接口。但總的來說,這是一條路。
不管你做什麼,都不要在控制器裏做。管制員應該很苗條。
+1脂肪控制器只屬於英國鐵路有關的兒童節目 – Phil 2011-03-18 12:58:07
這聽起來很明智。非常感謝您 – 2011-03-18 13:22:17
我已經登錄了,爲您提供了分數!謝謝你的回答。關於這個我想在這裏提到一個很好的討論。 http://www.rmauger.co.uk/2009/03/why-the-zend-framework-actionstack-is-evil/ – kta 2014-05-18 05:59:42