2009-07-23 68 views
4

我正在处理的应用程序有几个名为“active”的数据库字段,它是布尔型的。但是,我不想在视图中显示“1”或“0”,而是要说“是”或“否”。CakePHP自定义全局函数

我有以下功能:

function activeFriendlyName($status) 
    { 
     if ($status == 1) 
     { 
      return "Yes"; 
     } 
     else 
     { 
      return "No"; 
     } 
    } 

不过,我不确定,我应该把这个全局函数?它会是app_model.php文件吗?另外,我将如何调用这个函数来应用“格式化”?

回答

5

您应该保留来自数据库的数据,直到您需要显示它为止。这意味着View是改变它的正确的地方。我只是去简单:

echo $model['Model']['bool'] ? "Yes" : "No"; 

但是如果你需要,你不想重复每次,使自定义助手更复杂的格式化规则。

可能bootstrap.php定义一个全局函数,但我不会推荐它。

+0

这就是我现在设置的方式:硬编码。我试图设置一种方式,所以如果我决定说“活跃”:“不活跃”,全球变化将更容易..... – Jefe 2009-07-23 04:12:19

+3

然后最好的选择是做一个自定义帮手。或者使用翻译功能:`$ x? __('是'):__('否')` – deceze 2009-07-23 04:16:24

0

我会亲自做的是一个一个afterFind回调添加到您与改变的状态模型。

class MyModel extends Model { 

    ... // the rest of model code 

    function afterFind($results) { 
     foreach ($results as $key => $val) { 
      if (isset($val['MyModel']['status'])) { 
       $results[$key]['MyModel']['status_text'] = $results[$key]['MyModel']['status'] ? 'Yes' : 'No'; 
      } 
     } 
     return $results; 
    } 
} 

这样,你还是有,如果正常形态的所有领域,你仍然可以例如如果将从db中获取的int值更改为字符串,则更新并保存不起作用的模型。