我正在尝试使用Lithium创建一个编辑表单来编辑一些MongoDB数据。我的数据(由另一个工具生成)如下所示:
{
"thing_a" : "value_a",
"thing_b" : "value_b",
"settings" :
{
"sub_thing_a" : ["sub_value_a", "sub_value_b"]
}
}我遇到的问题是“设置”中的数组“sub_thing_a”。我需要为每个值显示一个文本框,这样我就可以编辑它们并将它们保存回去。这里的最终目标是使用一些jQuery在表单中添加/删除文本框,然后从数组中添加/删除值-但现在我只尝试使用一个简单的版本,它将允许我编辑值并保存它们。
我的模型非常简单:
<?php
namespace app\models;
class Test extends \lithium\data\Model {
protected $_meta = array('source' => 'test');
}
?> 控制器也是一样的:
<?php
namespace app\controllers;
use app\models\Test;
class TestsController extends \lithium\action\Controller {
public function index() {
$tests = Test::all();
return compact('tests');
}
public function edit($id=null) {
if(isset($id)) {
$test = Test::find($id);
} else {
$test = Test::create();
}
if ($this->request->data) {
if ($test->save($this->request->data)) {
$this->redirect('/tests/index');
}
}
return compact('test');
}
}
?>问题从编辑表单开始-就像我现在的情况一样,它将显示我的数组的值,但数据不能正确写入。关于我应该如何处理这个问题,有什么线索吗?(注意:正如我前面提到的,我需要生成一个动态版本,它允许我在表单中添加/删除文本框,所以我确实需要能够对助手进行某种控制--以防有一些非常简单的“约定”方法。)
edit.html.php:
<?=$this->form->create($test); ?>
<?=$this->form->field('thing_a'); ?>
<?php foreach ($test->settings->sub_thing_a as $i=>$elem): ?>
<?=$this->form->field('settings.sub_thing_a',array('label'=>'thing', 'value'=>$test->settings->sub_thing_a[$i]));?>
<?php endforeach; ?>
<?=$this->form->submit('save'); ?>
<?=$this->form->end(); ?>和index.html.php (表示完整性)
<?php foreach($tests as $test): ?>
<h2><?=$this->html->link($test->thing_a,'/tests/edit/'.$test->_id); ?></h2>
<?php foreach($test->settings->sub_thing_a as $item): ?>
<h4><?=$item ?></h4>
<?php endforeach; ?>
<?php endforeach; ?>发布于 2012-05-31 22:12:17
好的,所以最后,它(当然)非常简单。在edit.html.php文件中,我们可以简单地写下:
<?=$this->form->field('settings[sub_thing_a][]',array('value'=>$test->settings->sub_thing_a[$i]));?>settingssub_thing_a创建一个数组,其中包含表单中字符串值的数组。
https://stackoverflow.com/questions/10819474
复制相似问题