2014-01-12 46 views
1

我正在开发一个API来访问我的数据库上的一些数据。我正在为API的每个部分创建一个控制器。例如,我将有一个控制器参加API调用以获取电影列表(FilmsController)和其他控制器以参加API调用以获取导演列表(DirectorsController)Laravel 4动态模型调用

每个控制器都有一组基本的方法(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'; 

} 

我是不是一个坏的设计走向何方?

回答

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

0

为什么称它为模型中使用的变量和使用call_user_func功能

你可以创建ApiController为抽象类和重写的基本设置方法(的GetList更多关于这一点,的getInfo)到FilmsController和DirectorsController然后就可以使用电影模式

ApiController:

class ApiController extends BaseController { 


    public function getList() 
    { 
    } 

FilmsController:

class FilmsController extends ApiController { 

       public function getList() 
       { 
        $items = Film::all(); 
        return Response::json($items); 


       } 

     } 
+1

的事情是,我不希望实现每个个案的方法的GetList,我想有一个“标准”设定的每一个API部分的方法。这就是我创建ApiController的原因。 @cheelahim答案是我正在寻找的。谢谢你们俩。 –