【问题标题】:Where should a certain function go- model or controller? CakePHP某个函数应该在哪里去模型或控制器? CakePHP
【发布时间】:2010-12-02 21:14:49
【问题描述】:

旅行有很多条腿有很多路段

在我的航班搜索应用程序中,我有一个函数可以返回唯一的 Leg.destination(s)。此功能适用于行程控制器方法。我是否将功能放在旅行模型或腿模型中?如果在腿部模型中我用 $this->Trip->Leg->findUniqueDests 调用它.....?我问是因为我想坚持 CakePHP 约定。谢谢!

//code that finds ALL destinations for each Leg
$destinations=$this->Trip->Leg->find('all', array('limit'=>100,'fields'=>'Leg.destination'));

//code that finds the unique destinations (to be used to search all flights for a particular city
function findUniqueDests($destinations){
  $unique_destinations = array();
  foreach ($destinations as $dest)
  {
      if(!in_array($dest, $unique_destinations))
      {
          $unique_destinations[] = $dest;
          sort($unique_destinations);
      }
  }
  return $unique_destinations;

}

【问题讨论】:

  • 很多条腿,每条腿有很多段,航班...您的应用程序控制飞行蜈蚣吗? :P 我认为这是模型中最好的。
  • 我们现在提取 Kayak 提供的所有数据。同意有些可能是过度的。
  • 胖模型瘦控制器,它经常帮助我检查我的代码:)

标签: cakephp models


【解决方案1】:

是的,你可以把它放在腿模型中。这将允许您从任何其他相关模型调用该方法:

// Trip Controller
$this->Trip->Leg->findUniqueDests($destinations);

// Leg Controller
$this->Leg->findUniqueDests($destinations);

// Segment Controller
$this->Segment->Leg->findUniqueDests($destinations);

感谢您知道它应该在模型中。许多从 CakePHP 开始的人将他们所有的方法都塞进了控制器中。

以这种方式在模型中执行此操作可让您在整个应用程序中重用代码。实际上,这种效用函数可以放在任何模型中。但既然是处理 Legs,最合乎逻辑的家就是 Leg 模型。

问题:为什么每次将目的地添加到数组时都进行排序?这样会更优化:

function findUniqueDests($destinations) {
    $unique_destinations = array();
    foreach ($destinations as $dest) {
        if(!in_array($dest, $unique_destinations)) {
            $unique_destinations[] = $dest;
        }
    }
    return sort($unique_destinations);
}

【讨论】:

  • 你是对的!谢谢。我借用了大部分功能,所以没有充分考虑/使用它。
猜你喜欢
  • 2016-07-23
  • 1970-01-01
  • 2018-02-01
  • 2020-06-08
  • 2018-02-02
  • 1970-01-01
  • 2016-08-15
  • 2011-05-03
  • 2010-09-22
相关资源
最近更新 更多