2015-04-07 81 views
0

我試圖爲CakePHP中的選擇框設置默認值。我的選擇是使用模型的靜態函數,它是像這樣從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的靜態函數的任何想法。

+0

看起來像我的靜態枚舉..:P – mark

+0

爲什麼不對輸入使用'default'選項? – arilia

+0

@arilia默認值(來自模型層)IMO是邏輯IMO的一部分,應該位於控制器的else子句中。 – mark

回答

3

爲什麼你使用類常量,然後不在代碼中使用它們? 對我沒有意義。

您正在將整數值解析爲字符串。如果您想將它用作填充了枚舉數據的下拉列表的默認值,那也沒有意義。

正確的做法,從邏輯上講,應該是:

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

還要注意的是常量應該最好是實整數,你應該使用TINYINT(2)如博客上的代碼中提到的DB型。

+0

否請求數據選項將不起作用,因爲它將爲空。技巧就是設置默認值,同時能夠檢索選項列表。我不知道如何正確執行此操作? –

+0

使用上述方法。你不能調用'ModelName',因爲它會說沒找到類。無論如何,我真的不知道如何去做這件事。 –

+0

請求數據選項是正確的,但由於某種原因它無法加載模型類,因此我使用了'$ this-> loadModel('Field')',儘管它在現場控制器中沒有意義。 –

相關問題