簡體   English   中英

在laravel 4中路由

[英]Routing in laravel 4

我有一個稱為報告的部分,在此之下有大約40-50個報告。

對於每個報告,我需要定義一個單獨的類/控制器。

我在控制器下創建了一個reports文件夾,並在其下添加了一個ReportsController類。 我的路由路由到此ReportsController的add方法,並根據傳遞的參數調用不同的報告類(例如ContainerReportController)的add方法。

示例代碼:

controllers/reports/ReportController.php

    class ReportController extends BaseController {
     public function add($type)
     {
        $controller = Str::studly($type) . 'Controller';
        return $controller::add();
     }
    }


controllers/reports/ContainerReportController.php

    class ContainerController extends BaseController {
     public function add()
     {
         return "Report will be added here and redirected to main page".
     }
    }

我這樣做是因為我無法定義到每種不同類型的報告的路由(例如ContainerReportController),我定義了到主RportController的一條路由,並從那里調用不同的控制器。

我想知道我是否以正確的方式進行操作,或者是否可以使用其他可以幫助改善我的代碼的方法。

僅供參考-在控制器/報告目錄中添加每個報告后,我運行composer dump-autoload ,以便在應用程序運行時自動加載報告類。

請幫助改善此編碼。

謝謝,Nikhil

我認為您的代碼還不錯,但是有一些改進:

所以你有一條路線:

Route::get('report/{type}', 'ReportsController@report');

一個可以實例化您的報告而不是靜態使用它的報告控制器,這是可測試的:

class ReportsController extends BaseController {

    public function report($type)
    {
        $report = Str::studly($type) . 'Report';

        return with(new $report)->add();
    }

}

許多報表類擴展了BaseReport類。

這不是控制器,因為控制器不應相互通信。 控制器基本上接收到將請求傳遞給服務類或模型的請求,獲取處理的數據並將其發送到視圖。

class ContainerReport extends BaseReport {

    public function add()
    {
        $this->reportData = "Report will be added here and redirected to main page".

        return $this->render();
    }

}

還有一個BaseReport類,該類將由所有報告類擴展,以執行您的報告肯定會做的普通事情:

abstract class BaseReport {

    protected $reportData;

    public function render()
    {
        return $this->reportData;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM