我试图为我的问题找到一些解决方案,但我要么搜索得不好,因为我不知道使用哪些关键字或“解决方案”没有解决我的问题。
我想将普通的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版。
答案 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并告诉用户将每个“参数”放在一行上,然后在控制器中用;
替换换行符。