美文网首页
laravel控制器中调用其他控制器

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

作者: PeterQ1998 | 来源:发表于2017-05-06 20:10 被阅读0次

    做spa应用的时候,首屏通常需要加载大量数据,这个时候如果可以将多个api请求合并为一个可以提高服务效率。有时候也有需求在一个控制器中调用其他控制器方法。

    laravel中的Controller及其action都是由框架自动调用,并注入依赖的,如果手动new的话会比较麻烦,于是我写了一个Trait,在控制器中引入就可以很方便实现调用其他控制器了。

    <?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
                ]);
        }
    

    注意: 这样跳过了路由级权限验证,请注意鉴权

    相关文章

      网友评论

          本文标题:laravel控制器中调用其他控制器

          本文链接:https://www.haomeiwen.com/subject/nkrytxtx.html