将数据传递给View时,MVC模式的正确方法是什么?

时间:2016-03-09 14:48:25

标签: php laravel model-view-controller

我正在阅读正确的MVC,我正在重构当前项目的一些代码。它是用Laravel编写的。我已经将问题简化为:

我有一个域对象'User'和'Log'。用户有很多日志。

用户域对象:

class User extends Authenticatable implements UserInterface
    {

    protected $fillable = ['surname', 'name','email'];
    protected $hidden = [
    'password', 'remember_token',
    ];

    public function logs()
    {
        return $this->hasMany('App\Models\Log');
    }
}

记录域对象:

 class Log extends Model implements LogInterface
    {
      public $timestamps = false;
      protected $fillable = [
        'log_date',
        'log_hours', 
        'log_minutes'
      ];

      protected $dates = ['log_date'];

      public function user()
        {
          return $this->belongsTo('App\Models\User');
        }
  }

在我看来,我想显示某一天记录的总小时数。我正在我的控制器中注入一个类,它有一个方法calcHoursPerDay($ user_id),它注入LogRepository以获取给定日期的该用户的日志,并将计算的值返回给视图。

阅读适当的MVC,我倾向于删除该类并为我的用户域对象创建一个名为HoursOnDay($ date)的方法。因此,将模型逻辑保留在模型中。

这是使用MVC的方式,如果没有,那么正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

是的,这是在Laravel和MVC中做事的正确方法。 calcHoursPerDay()应该是User或Log模型的一部分。另外,看看范围doc,我想这就是你想要使用的东西:

https://laravel.com/docs/5.1/eloquent#query-scopes