Php Laravel重用控制器逻辑

Php Laravel重用控制器逻辑,php,laravel,laravel-5,laravel-5.4,Php,Laravel,Laravel 5,Laravel 5.4,我有多个控制器和多个方法,它们都返回视图 class PageController extends Controller { public function index() { // do lots of stuff return view('view.name', $lotsOfStuffArray); } public function list() { //...and so on } 我现在需要创建一个A

我有多个控制器和多个方法,它们都返回视图

class PageController extends Controller {
    public function index()
    {
        // do lots of stuff
        return view('view.name', $lotsOfStuffArray);
    }

    public function list()
    {
    //...and so on
}
我现在需要创建一个API,它执行与上述方法相同的逻辑,但返回JSON输出:

class PageApiController extends Controller {
    public function index()
    {
        // do lots of the same stuff
        return $lotsOfStuffCollection;
    }

    public function list()
    {
    //...and so on
}
不必将代码从一个控制器复制粘贴到另一个控制器,实现这一点的最佳方法是什么

我曾尝试将许多逻辑放入traits中,并在我雄辩的模型中使用它们,但这仍然要求我将代码从一个控制器复制并粘贴到另一个控制器。我还应该指出,检查
expectsJson()
并相应地返回响应是不可行的,因为我有很多很多方法


将逻辑存储在父类中,然后创建一个用视图响应的子控制器和一个用JSON响应的子控制器,这是一个好主意吗?

您可以将逻辑抽象为服务类。我

您有PageController、PageApicController和PageService

class PageService {
    public function doStuff()
    {
        return $stuff;
    }
}

class PageController extends Controller {
    public function index()
    {
        $service = new PageService();
        $stuff = $service->doStuff();
        return $stuff;
    }

}

class PageAPIController extends Controller {
    public function index()
    {
        $service = new PageService();
        $stuff = $service->doStuff();
        return $stuff->toJSON();
    }

    protected function toJSON(){
       //You could also abstract that to a service or a trait.
    }

}

您可以将逻辑抽象为服务类。我

您有PageController、PageApicController和PageService

class PageService {
    public function doStuff()
    {
        return $stuff;
    }
}

class PageController extends Controller {
    public function index()
    {
        $service = new PageService();
        $stuff = $service->doStuff();
        return $stuff;
    }

}

class PageAPIController extends Controller {
    public function index()
    {
        $service = new PageService();
        $stuff = $service->doStuff();
        return $stuff->toJSON();
    }

    protected function toJSON(){
       //You could also abstract that to a service or a trait.
    }

}

我知道该怎么做,别担心;)在我接受之前,只需做一点实验,探索我将如何在我的环境中实现它。@Enstage别担心。我知道这个练习,别担心;)在我接受之前,只需做一点实验,探索一下我将如何在我的环境中实现它。@Enstage不用担心。