2014-01-12 68 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答案是我正在尋找的。謝謝你們倆。 –