从cakePHP中的控制器调用静态模型函数

时间:2015-04-07 08:03:58

标签: cakephp cakephp-2.5

我正在尝试为CakePHP中的选择框设置默认值。我可以使用模型中的静态函数访问我的选项,该函数定义如下

public static function purpose($value = null)
{
    $options = array(
        self::PURPOSE_HOMECONSUMPTION => __('Home Consumption', true),
        self::PURPOSE_COMMERCIAL => __('Commercial', true)
    );
    return self::enum($value, $options);
}

// Constants for status attribute
const PURPOSE_HOMECONSUMPTION = '0';
const PURPOSE_COMMERCIAL = '1';

在我看来,我通过以这种方式调用此静态函数来填充选择框

echo $this->Form->input('purpose', array(
  'type' => 'select',
  'options' => Field::purpose()

当然它会选择选项,但默认值为Home Consumption。我想设置它Commercial。我在控制器中尝试过类似的东西

$this->request->data['Field']['purpose'] = Field::purpose(1);

但它不起作用。关于如何在控制器中调用静态函数并将值设置为Commercial的任何想法。

1 个答案:

答案 0 :(得分:3)

为什么使用类常量然后在代码中不使用它们? 对我毫无意义。

您正在将整数值解析为字符串。如果您想将其用作填充了枚举数据的下拉列表的默认值,那也没有意义。

逻辑上,正确的方法是:

// The constant that holds the value 1
$this->request->data['Field']['purpose'] = ModelName::PURPOSE_COMMERCIAL;

另请注意,常量最好是实数整数,并且您应该使用tinyint(2)作为博客代码中提到的db类型。