Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 拉维尔4号的布线_Laravel_Laravel 4 - Fatal编程技术网

Laravel 拉维尔4号的布线

Laravel 拉维尔4号的布线,laravel,laravel-4,Laravel,Laravel 4,我有一个叫做报告的部分,在这个部分下有大约40-50个报告 对于每个报告,我需要定义一个单独的类/控制器 我在控制器下创建了一个reports文件夹,并在其下添加了一个ReportsController类。我将路由路由路由到此ReportsController的add方法,并根据传递的参数调用不同的report类(如ContainerReportController)add方法 示例代码: controllers/reports/ReportController.php class R

我有一个叫做报告的部分,在这个部分下有大约40-50个报告

对于每个报告,我需要定义一个单独的类/控制器

我在控制器下创建了一个reports文件夹,并在其下添加了一个ReportsController类。我将路由路由路由到此ReportsController的add方法,并根据传递的参数调用不同的report类(如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;
    }

}
谢谢:)我回去工作后会试试的,会更新的!!太好了:)现在看起来更有条理了。。但是我认为在BaseReport类中,render方法应该是公共的??你能看到一个实例吗?我需要一个私有方法?