我正在开发一个API来访问我的数据库中的一些数据。我正在为API的每个部分创建一个控制器。例如,我将有一个控制器参加API调用以获取电影列表(FilmsController)和其他控制器参加API调用以获取导演列表(DirectorsController)
每个控制器都有一组基本的方法(getList,getInfo),所以我创建了一个ApiController作为其他控件的基础。在ApiController中,我有基本的方法集,但我必须以非常礼貌的方式调用模型。
我错过了什么?有没有其他方法动态调用模型?我使用的控制器错了吗?
这是代码,谢谢。
class ApiController extends BaseController {
protected $model = '';
public function getList()
{
$items = call_user_func(array($this->model,'all'));
return Response::json($items);
}
...
}
和FilmsController
class FilmsController extends ApiController {
protected $model = 'Film';
}
我的设计糟糕吗?
答案 0 :(得分:3)
如果您真的想将模型绑定到控制器,最好使用Laravel IoC容器及其自动分辨率功能。
class ApiController extends BaseController {
protected $model;
public function getList()
{
$items = $this->model->all();
return Response::json($items);
}
}
class FilmsController extends ApiController {
public function __construct(Model $model)
{
$this->model = $model;
}
}
中详细了解此信息
答案 1 :(得分:0)
为什么使用变量调用模型并使用call_user_func
函数
您可以将ApiController创建为抽象类,并将基本的方法集(getList,getInfo)覆盖到FilmsController和DirectorsController中,然后就可以使用Film Model
ApiController:
class ApiController extends BaseController {
public function getList()
{
}
FilmsController:
class FilmsController extends ApiController {
public function getList()
{
$items = Film::all();
return Response::json($items);
}
}