laravel控制器中調用其他控制器

做spa應用的時候,首屏通常需要加載大量數(shù)據(jù),這個時候如果可以將多個api請求合并為一個可以提高服務效率。有時候也有需求在一個控制器中調用其他控制器方法。

laravel中的Controller及其action都是由框架自動調用,并注入依賴的,如果手動new的話會比較麻煩,于是我寫了一個Trait,在控制器中引入就可以很方便實現(xiàn)調用其他控制器了。

<?php

namespace App\Tools;

use Illuminate\Routing\RouteDependencyResolverTrait as DepResolver;

trait CallActionTrait {
    private function callControllerMethod($action = '', $routeParameters = []){
        return with(new Resolver)->callControllerMethod($action, $routeParameters);
    } 
}
class Resolver {
    use DepResolver;

    private $container;

    public function __construct(){
        $this->container = app();
    }

    public function callControllerMethod($action = '', $routeParameters = []){
        list($class, $method) = explode('@', $action);
        $instance = $this->container->make($class);
        $parameters = $this->resolveClassMethodDependencies($routeParameters, $instance, $method);
        return $instance->callAction($method, $parameters);
    }
}

在控制器中像這樣使用它

    use \App\Tools\CallActionTrait;

    public function test(){
        return $this->callControllerMethod(
            'App\Http\Controllers\PostController@getRelatives',
            [
                'count'=>10
            ]);
    }

注意: 這樣跳過了路由級權限驗證,請注意鑒權

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • 原文鏈接 必備品 文檔:Documentation API:API Reference 視頻:Laracasts ...
    layjoy閱讀 8,713評論 0 121
  • 必備品文檔:DocumentationAPI: API Reference視頻:Laracasts速查表:Lara...
    ethanzhang閱讀 5,885評論 0 68
  • 0.1配置1.模板繼承2.控制器3.git4.支付寶支付的流程5.路由6.中間件7.請求8.laravel 學習筆...
    云龍789閱讀 888評論 0 5
  • 介紹 不要把所有處理請求的邏輯都放到一個單獨的 routes.php 文件里,我們可以使用控制器去組織這些行為。C...
    伊Summer閱讀 893評論 0 1

友情鏈接更多精彩內(nèi)容