提问者:小点点

从Laravel5中的另一个控制器访问控制器方法


我有两个控制器SubmitPerformanceControllerPrintReportController

PrintReportController中,我有一个名为getPrintReport的方法。

如何在SubmitPerformanceController中访问此方法?


共1个答案

匿名用户

您可以像这样访问您的controller方法:

app('App\Http\Controllers\PrintReportController')->getPrintReport();

这是可行的,但从代码组织的角度来看,这是很糟糕的(记住要为printreportcontroller使用正确的名称空间)

您可以扩展PrintReportController,以便SubmitPerformanceController继承该方法

class SubmitPerformanceController extends PrintReportController {
     // ....
}

但这也将从printreportcontroller继承所有其他方法。

最好的方法是创建一个trait(例如在app/traits),在那里实现逻辑并告诉您的控制器使用它:

trait PrintReport {

    public function getPrintReport() {
        // .....
    }
}

告诉您的控制器使用此特性:

class PrintReportController extends Controller {
     use PrintReport;
}

class SubmitPerformanceController extends Controller {
     use PrintReport;
}

这两种解决方案都使SubmitPerformanceController具有GetPrintReport方法,因此您可以使用$this->GetPrintReport();从控制器内调用它,或者直接作为路由调用它(如果您在routes.php中映射了它)

你可以在这里阅读更多关于特质的内容。