CakePHP一列的多个输入字段

时间:2014-01-22 13:25:17

标签: php forms cakephp

我试图为我的问题找到一些解决方案,但我要么搜索得不好,因为我不知道使用哪些关键字或“解决方案”没有解决我的问题。

我想将普通的textarea-field拆分为单个文本字段,以便每个单行文本字段代表textarea-field中的一行。我希望这些单行文本字段的所有内容将作为一个文本保存在一起,但是以“;”分隔。字符。

具体的想法是,用户可以添加1-10个“正面”参数和1-10个“负面”参数,我不想在我的表格中为每一面添加10列。

我对CakePHP比较陌生,不知道如何创建这样一个特殊的表单。有人有想法吗?

这是我的控制器代码:

    public function add() {
    if ($this->request->is('post')) {
        $this->Review->create();
        //Added this line
        $this->request->data['Review']['user_id'] = $this->Auth->user('id');
        global $textarea;
        if (!empty($this->request->data)) {
            $textarea = implode(';', $this->request->data['Review']['review_positive']);
        }
        if ($this->Review->save($this->request->data)) {
            $this->Session->setFlash(__('The review has been saved.'.$textarea));
            return $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The review could not be saved. Please, try again.'));
        }
    }
}

这是我的模型代码:

class Review extends AppModel {

/**
 * Validation rules
 *
 * @var array
 */
public $validate = array(
    'review_body' => array(
        'notEmpty' => array(
            'rule' => array('notEmpty'),
            //'message' => 'Your custom message here',
            //'allowEmpty' => false,
            //'required' => false,
            //'last' => false, // Stop validation after this rule
            //'on' => 'create', // Limit validation to 'create' or 'update' operations
        ),
        'Length' => array(
            'rule'    => array('between', 2700, 8200),
            'message' => 'Review muss zwischen 2700 und 8200 Zeichen haben'
        )
    ),
    'review_positive' => array(
        'notEmpty' => array(
            'rule' => array('notEmpty'),
        //'message' => 'Your custom message here',
        //'allowEmpty' => false,
        //'required' => false,
        //'last' => false, // Stop validation after this rule
        //'on' => 'create', // Limit validation to 'create' or 'update' operations
        ),
    ),

这是我的'添加'视图的视图代码:

<?php
    echo $this->Form->input('review_body', array('label' => 'Review'));
            for($i = 0; $i < 10; $i++) {
                echo $this->Form->input('review_positive.'.$i, array('type'=>'text'));
            }

这是我的“添加评论”的HTML代码 - 视图:

    <form action="/gr_1/reviews/add" id="ReviewAddForm" method="post" accept-charset="utf-8"><div style="display:none;"><input name="_method" value="POST" type="hidden"></div> <fieldset>
        <legend>Add Review</legend>
    <input name="data[Review][user_ID]" value="1" id="ReviewUserID" type="hidden"><input name="data[Review][game_ID]" value="0" id="ReviewGameID" type="hidden"><div class="input textarea required"><label for="ReviewReviewBody">Review</label><textarea name="data[Review][review_body]" cols="30" rows="6" id="ReviewReviewBody" required="required"></textarea></div><div class="input text required"><label for="review_positive0"></label><input name="data[review_positive][0]" id="review_positive0" required="required" type="text"></div><div class="input text"><label for="review_positive1">1</label><input name="data[review_positive][1]" id="review_positive1" type="text"></div><div class="input text"><label for="review_positive2">2</label><input name="data[review_positive][2]" id="review_positive2" type="text"></div><div class="input text"><label for="review_positive3">3</label><input name="data[review_positive][3]" id="review_positive3" type="text"></div><div class="input text"><label for="review_positive4">4</label><input name="data[review_positive][4]" id="review_positive4" type="text"></div><div class="input text"><label for="review_positive5">5</label><input name="data[review_positive][5]" id="review_positive5" type="text"></div><div class="input text"><label for="review_positive6">6</label><input name="data[review_positive][6]" id="review_positive6" type="text"></div><div class="input text"><label for="review_positive7">7</label><input name="data[review_positive][7]" id="review_positive7" type="text"></div><div class="input text"><label for="review_positive8">8</label><input name="data[review_positive][8]" id="review_positive8" type="text"></div><div class="input text"><label for="review_positive9">9</label><input name="data[review_positive][9]" id="review_positive9" type="text"></div><div class="input textarea required"><label for="ReviewReviewNegative">Kontra</label><textarea name="data[Review][review_negative]" cols="30" rows="6" id="ReviewReviewNegative" required="required"></textarea></div><div class="input textarea required"><label for="ReviewReviewConclusion">Fazit</label><textarea name="data[Review][review_conclusion]" cols="30" rows="6" id="ReviewReviewConclusion" required="required"></textarea></div><div class="input number required"><label for="ReviewReviewValue">Wertung</label><input name="data[Review][review_value]" id="ReviewReviewValue" required="required" type="number"></div><input name="data[Review][review_rating]" value="0" id="ReviewReviewRating" type="hidden"><input name="data[Review][review_flags]" value="0" id="ReviewReviewFlags" type="hidden"><div class="input date required"><label for="ReviewReviewCreatedMonth">Review Created</label><select name="data[Review][review_created][month]" id="ReviewReviewCreatedMonth" required="required">
<option value="01" selected="selected">January</option>
<option value="02">February</option>
<option value="03">March</option>
<option value="04">April</option>
<option value="05">May</option>
<option value="06">June</option>
<option value="07">July</option>
<option value="08">August</option>
<option value="09">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>-<select name="data[Review][review_created][day]" id="ReviewReviewCreatedDay" required="required">
<option value="01">1</option>
<option value="02">2</option>
<option value="03">3</option>
<option value="04">4</option>
<option value="05">5</option>
<option value="06">6</option>
<option value="07">7</option>
<option value="08">8</option>
<option value="09">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22" selected="selected">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>-<select name="data[Review][review_created][year]" id="ReviewReviewCreatedYear" required="required">
<option value="2034">2034</option>
<option value="2033">2033</option>
<option value="2032">2032</option>
<option value="2031">2031</option>
<option value="2030">2030</option>
<option value="2029">2029</option>
<option value="2028">2028</option>
<option value="2027">2027</option>
<option value="2026">2026</option>
<option value="2025">2025</option>
<option value="2024">2024</option>
<option value="2023">2023</option>
<option value="2022">2022</option>
<option value="2021">2021</option>
<option value="2020">2020</option>
<option value="2019">2019</option>
<option value="2018">2018</option>
<option value="2017">2017</option>
<option value="2016">2016</option>
<option value="2015">2015</option>
<option value="2014" selected="selected">2014</option>
<option value="2013">2013</option>
<option value="2012">2012</option>
<option value="2011">2011</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
<option value="2008">2008</option>
<option value="2007">2007</option>
<option value="2006">2006</option>
<option value="2005">2005</option>
<option value="2004">2004</option>
<option value="2003">2003</option>
<option value="2002">2002</option>
<option value="2001">2001</option>
<option value="2000">2000</option>
<option value="1999">1999</option>
<option value="1998">1998</option>
<option value="1997">1997</option>
<option value="1996">1996</option>
<option value="1995">1995</option>
<option value="1994">1994</option>
</select></div> </fieldset>
<div class="submit"><input value="Submit" type="submit"></div></form>

编辑:我忘了提到我使用cakePHP 2.4版。

1 个答案:

答案 0 :(得分:0)

假设您知道如何使用cake创建表单,可以试试这个:

在你看来

for($i = 0; $i < 10; $i++)
    echo $this->Form->input('opinions.'.$i, array('type'=>'text');

提交后,在控制器中,只是连接那些

public function thesubmitaction() {
    //all other code
   if (!empty($this->request->data)) {
       $textarea = implode(';', $this->request->data['TheModel']['opinions']);
   }
} 

就是这样,你将在$textarea中找到最后一个字符串。

我不知道你尝试了什么,或者你对蛋糕有多熟悉,所以如果你需要我澄清一些事情,请告诉我。

其他选项只是放置textarea并告诉用户将每个“参数”放在一行上,然后在控制器中用;替换换行符。

相关问题