Laravel 4动态模型调用

时间:2014-01-12 17:19:12

标签: php api laravel laravel-4

我正在开发一个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';

}

我的设计糟糕吗?

2 个答案:

答案 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;
    }
}

documentation

中详细了解此信息

答案 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);


                }

        }