Ens*_*age 1 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
}
Run Code Online (Sandbox Code Playgroud)
我现在需要创建一个API,它执行与上述方法大致相同的逻辑,但返回JSON输出:
class PageApiController extends Controller {
public function index()
{
// do lots of the same stuff
return $lotsOfStuffCollection;
}
public function list()
{
//...and so on
}
Run Code Online (Sandbox Code Playgroud)
在不必将代码从一个控制器复制并粘贴到另一个控制器的情况下,实现此目的的最佳方法是什么?
我已经尝试将很多逻辑放入特征并在我的Eloquent模型中使用它们,但这仍然要求我将代码从控制器复制并粘贴到控制器.我还应该注意expectsJson(),由于我有很多方法,所以检查并返回相应的响应是不可行的.
将逻辑存储在父类中然后创建一个用视图响应的子控制器和一个用JSON响应的子控制器是不是一个好主意?
您可以将逻辑抽象为服务类.我已经回答了类似的问题.
你有PageController,PageAPIController和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.
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
682 次 |
| 最近记录: |