3 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以這樣訪問控制器方法:
app('App\Http\Controllers\PrintReportController')->getPrintReport();
這可以工作,但是在代碼組織方面很不好(請(qǐng)記住為您使用正確的名稱空間PrintReportController)
您可以擴(kuò)展,PrintReportController以便SubmitPerformanceController將繼承該方法
class SubmitPerformanceController extends PrintReportController {
// ....
}
但這也會(huì)繼承的所有其他方法PrintReportController。
最好的方法是創(chuàng)建一個(gè)trait(例如app/Traits),在其中實(shí)現(xiàn)邏輯并告訴您的控制器使用它:
trait PrintReport {
public function getPrintReport() {
// .....
}
}
告訴您的控制器使用此特征:
class PrintReportController extends Controller {
use PrintReport;
}
class SubmitPerformanceController extends Controller {
use PrintReport;
}
兩種解決方案都SubmitPerformanceController具有g(shù)etPrintReport方法,因此您可以$this->getPrintReport();在控制器內(nèi)使用或直接將其作為路徑調(diào)用(如果您在中將其映射routes.php)
您可以在這里閱讀更多有關(guān)特征的信息。

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果您需要在另一個(gè)控制器中使用該方法,則意味著您需要對(duì)其進(jìn)行抽象并使其可重用。將該實(shí)現(xiàn)移到服務(wù)類(ReportingService或類似的類)中,并將其注入到控制器中。
例:
class ReportingService
{
public function getPrintReport()
{
// your implementation here.
}
}
// don't forget to import ReportingService at the top (use Path\To\Class)
class SubmitPerformanceController extends Controller
{
protected $reportingService;
public function __construct(ReportingService $reportingService)
{
$this->reportingService = $reportingService;
}
public function reports()
{
// call the method
$this->reportingService->getPrintReport();
// rest of the code here
}
}
對(duì)需要該實(shí)現(xiàn)的其他控制器執(zhí)行相同的操作。從其他控制器獲取控制器方法是一種代碼味道。

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊
不建議從另一個(gè)控制器調(diào)用一個(gè)控制器,但是,如果由于某種原因必須這樣做,則可以執(zhí)行以下操作:
Laravel 5兼容方法
return \App::call('bla\bla\ControllerName@functionName');
注意:這不會(huì)更新頁面的URL。
最好改為調(diào)用Route并讓它調(diào)用控制器。
return \Redirect::route('route-name-here');
添加回答
舉報(bào)