2012-09-03 50 views
0

嗨我已添加動態添加視圖上的輸入字段。當我提交我的表單時,我希望它們的所有輸入字段都連接成一個字符串並存儲在單個數據庫字段中。cakephp在模型中獲取文本字段的值

我試圖用cakephp的beforeSave方法實現這一點,但我似乎無法找到如何獲得模型內的文本字段的值。

function beforeSave($options) 
{ 
    $result = ''; 
    $bool = true; 
    $counter = 0; 

    while($bool == true) 
    { 
    $result = $result + ',' + $this->data['Variable']['selectOptions' + counter]; 
    } 

    return true; 
} 

任何有關如何實現這一目標的想法?

在此先感謝。

+0

粘貼代碼,請...儘管可以在'$這個 - 讓您的數據> data'在beforeSave功能... – Rikesh

+2

它似乎很明顯對我來說,你永遠不應該操作模型中的數據。在發送到模型之前,您應該修改控制器中的數據。 – Kao

+0

因此,獲取控制器中的值將它們粘貼到一個字符串中,然後在視圖中設置文本字段並保存值? – Schokea

回答

1

在我看來(從視圖MVC點),這將是更好的保存模型前,在串聯控制器中的字段,然後取消設置不必要的字段...

0

後得到的模型後的值,可以合併將數組值變爲像這樣的單個變量..

<?php 
    $var = array('test1','test2','test3','test4','test5','test6'); 
    $new_values = implode(',',$var); 
    echo $new_values; 
?> 

您可以在保存到數據庫後檢索這些值。

0

這可能不是完美的答案,但可能給你一些頭在這個方向開始

function beforeSave($options = array()) { 

    pr($this->data); // <= show data you intend to save 
    exit; 
} 

使用的foreach循環的數據陣列($這個 - >數據)和值進行級聯和分配在連接字符串的費爾德名

function beforeSave($options = array()) { 
foreach ($this->data['Variable'] as $key=>$value) 
{ 
$feildflag = strstr($key, 'selectOptions'); 
if($feildflag){ 
$concatenatedstring .= $value; 
} 
} 
$this->data['Variable']['your_feild_name'] = $concatenatedstring ; 
} 
0

你的動態表單域應該看起來像在foreach循環:

<?php echo $this->Form->input('Model.field][', array()); 

在你的模型:

function beforeSave($options) 
{ 
    if(!empty($this->data)) 
    { 
     $this->data['Model']['common_field'] = implode(",", $this->data['Model'['field']; 
     unset($this->data['Model']['field']); 
    } 
}