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不用担心。