2012-05-30 2 views
0

일부 MongoDB 데이터를 편집하기 위해 Lithium을 사용하여 편집 양식을 만들려고합니다. (다른 도구에 의해 생산) 내 데이터는 다음과 같습니다Lithium PHP, 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; ?> 

답변

1

좋아, 결국, 그것은 (물론) 아주 간단했습니다. edit.html.php 파일에서는 간단히 작성할 수

<?=$this->form->field('settings[sub_thing_a][]',array('value'=>$test->settings->sub_thing_a[$i]));?> 

는 [sub_thing_a] [] 형태의 문자열 값의 어레이를 포함하는 배열을 생성하는 설정.