特定功能应该放在哪里?模型或控制器? CakePHP的

时间:2010-12-02 21:14:50

标签: cakephp models

Trips hasMany Legs hasMany Segments

在我的航班搜索应用程序中,我有一个返回唯一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;

}

1 个答案:

答案 0 :(得分:3)

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

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

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

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

要知道它应该在模型中,感谢你。许多以CakePHP开头的人都把他们所有的方法塞进控制器中。

以这种方式在模型中执行此操作允许您在整个应用程序中重用代码。实际上,这种效用函数可以放在任何模型中。但由于它处理腿部,最合乎逻辑的家庭将是腿部模型。

问题:为什么每次将目标添加到阵列时都要进行排序?这将更加优化:

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