【问题标题】:Laravel 4 dynamic model callLaravel 4 动态模型调用
【发布时间】:2014-01-31 09:35:58
【问题描述】:

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

}

我的设计是否糟糕?

【问题讨论】:

    标签: php api laravel laravel-4


    【解决方案1】:

    如果你真的想将模型绑定到控制器,最好使用 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了解更多信息

    【讨论】:

      【解决方案2】:

      为什么你使用变量调用模型并使用call_user_func函数

      您可以将 ApiController 创建为抽象类,然后将基本方法集(getList、getInfo)覆盖到 FilmsController 和 DirectorController 中,然后您可以使用 Film Model

      ApiController:

      class ApiController extends BaseController {
      
      
          public function getList() 
          {
          }
      

      电影控制器:

      class FilmsController extends ApiController {
      
                      public function getList() 
                      {
                         $items = Film::all();
                         return Response::json($items);
      
      
                      }
      
              }
      

      【讨论】:

      • 问题是我不想为每种情况都实现 getList 方法,我想为每个 api 部分设置一组“标准”方法。这就是我创建 ApiController 的原因。 @cheelahim 的答案正是我想要的。谢谢你们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 2014-08-06
      • 2019-03-04
      • 2012-04-07
      • 2013-07-04
      • 2017-05-22
      • 2016-02-16
      相关资源
      最近更新 更多