如何从另一个动作中调用多个动作?

时间:2014-08-17 23:24:42

标签: laravel laravel-4

我将非MVC应用程序迁移到Laravel 4.2,并且我不确定完成此任务的最佳方法。我在这样的路线上创建了几个报告:

/reports/this_report
/reports/that_report
/reports/another_report

这些操作查询数据库,运行一堆计算,并生成一些html表和表单。

我现在需要添加的是这样一个页面:

/reports/dashboard

此仪表板页面应以浓缩格式显示所有3个报告的输出,每个报告都带有"单击以查看详细信息"将用户带到主报告页面的链接。

仪表板操作是否有办法调用每个报告操作,并将其输出用作仪表板视图中的数据?

1 个答案:

答案 0 :(得分:0)

以下是一些关于如何执行此操作的代码。我不确定你是如何将所有内容都整理好的,所以你可能需要对此进行一些调整。

假设您有这样的仪表板路线。

Route::get('/reports/dashboard', DashboardController@showDashboard');

此路线应调用将进行处理的控制器方法。

class DashboardController extends BaseController 
{

    public function showDashboard()
    {
        return View::make('dashboard')->with(array(
            'report1_data'    => $this->getReport1Data(),
            'report2_data'    => $this->getReport2Data(),
            'report3_data'    => $this->getreport3Data()
        ));
    }

    public function getReport1Data() { //calculations, return array of results }

    public function getReport2Data() { //calculations, return array of results }

    public function getReport3Data() { //calculations, return array of results }

    public function showThisReport()
    {
        $data = $this->getReport1Data();
        return View::make('report')->with(array('data' => $data));
    }

    public function showThatReport()
    {
        $data = $this->getReport2Data();
        return View::make('report')->with(array('data' => $data));
    }

    public function showAnotherReport()
    {
        $data = $this->getReport3Data();
        return View::make('report')->with(array('data' => $data));
    }

}

因此,此仪表板方法将调用将查询数据库并计算报告的其他方法(您还将包含在此控制器中)。

然后它返回包含所有数据的视图。视图将格式化数据并将其显示给用户。

现在,为了使您能够看到每个报告的详细视图,我建议添加更多方法和路线以显示详细视图。

Route::get('/reports/this_report', 'DashboardController@showThisReport'); Route::get('/reports/that_report', 'DashboardController@showThatReport'); Route::get('/reports/another_report', 'DashboardController@showAnotherReport');

我希望这有帮助!祝你好运。