CakePHP自定义全局功能

时间:2009-07-23 03:51:58

标签: cakephp

我正在处理的应用程序有几个名为“active”的数据库字段,它是boolean。但是,我不想在视图中显示“1”或“0”,而是要说“是”或“否”。

我有以下功能:

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

但是,我不确定应该把这个全局函数放在哪里?它是app_model.php文件吗?另外,我如何调用此函数来应用“格式化”?

2 个答案:

答案 0 :(得分:5)

您应该保留数据库中的数据,直到您需要显示它为止。这意味着View是改变它的最佳位置。我只想简单地说:

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

但是如果您需要更复杂的格式规则,而您不想每次都重复这些规则,请制作一个自定义助手。

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

答案 1 :(得分: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值更改为字符串,那么这些模型将不起作用。