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