2013-10-24 9 views
4

많은 비용이있는 카테고리라는 모델이 있습니다. 사용자가 범주를 확장하고 비용을 편집 할 수있는 아코디언 유형 인터페이스를 생성하려고합니다. 입력 필드를 생성 할 수는 있지만 미리 채워지지 않았기 때문에 "편집"모드로 보이지 않습니다.formhelper에서 여러 레코드를 미리 채울 수 없습니다.

저는 온라인으로 검색 한 결과 CakePHP: How to update multiple records at the same time with the Form helper과 같은 관련 기사 몇 개를 발견했으며 CakePHP: Form helper with saveMany() to edit multiple rows at once도 있습니다. 나는 그들의 코드를 에뮬레이션하려고했지만 성공하지는 못했다.

내 CategoriesController 색인 기능은

public function index($project_id) { 

    $data = $this->Category->find('all', array(
     'conditions'=>array('Category.project_id' => $project_id), 
     'order'=>array('Category.category_name') 
    )); 
    $this->set('categories', $data); 
    $this->request->data = $data; 
} 

내가 FormHelper가 작동하려면 cakephp2가 설정할 수 $ this-> 요청 -> 데이터를 필요로 읽었습니다 ... 다음과 같습니다. 그러나 예제에서 나는 온라인으로 모두가 모델 이름의 복수형을 사용하는 것처럼 보이는 것을 발견했습니다. 그래서 나는 그것을 또한 시도했습니다.

내 범주 \ index.ctp는 다음과 같습니다. 나는 아직 아코디언 단계에 있지 않다. 나는 미리 채워진 입력 상자를 화면에 표시하려고합니다.

$i=0; 
foreach ($categories as $category) 
{ 
    echo $this->Form->input("Category.$i.category_id"); 
    echo $this->Form->input("Category.$i.category_name"); 
    $j=0; 
    foreach($category['Expense'] as $expense) 
    { 
     echo $this->Form->input('Expense.' . $j . '.expense_id'); 
     echo $this->Form->input('Expense.' . $j . '.expense_name'); 
     echo $this->Form->input('Expense.' . $j . '.dollar_amount'); 
     echo $this->Form->input('Expense.' . $j . '.sqft_amount'); 
     $j++; 
    } 
    $i++; 
} 

이 코드는 올바른 입력 필드를 뱉어 내기 때문에 제대로 반복되는 것으로 보입니다. 큰 문제는 필드를 미리 채우는 것입니다. 그것은 "편집"모드에있는 것처럼 보이지 않으며 나는 데이터를 저장하려고 할 때 길 아래로 문제가 될 것이라고 걱정합니다.

또한 필자는 $ this-> form-> create ('Category') 맨 위와 함께 사용해 보았습니다. 차이를 만드는 것 같지 않습니다.

는 $ 범주 배열은 다음과 같습니다 ...

array(
    (int) 0 => array(
     'Category' => array(
      'category_id' => '1', 
      'category_name' => 'Category 1', 
      'category_index' => '1', 
      'project_id' => '1' 
     ), 
     'Project' => array(
      'project_id' => '1', 
      'project_name' => '131 Anndale Dr', 
      'project_sqft' => '1700', 
      'project_cost' => '318', 
      'project_cost_per_sqft' => '0' 
     ), 
     'Expense' => array(
      (int) 0 => array(
       'expense_id' => '2', 
       'expense_name' => 'Nails', 
       'category_id' => '1', 
       'dollar_amount' => '50', 
       'sqft_amount' => '1', 
       'expense_index' => '2' 
      ), 
      (int) 1 => array(
       'expense_id' => '1', 
       'expense_name' => 'Wood', 
       'category_id' => '1', 
       'dollar_amount' => '99', 
       'sqft_amount' => '1', 
       'expense_index' => '1' 
      ) 
     ) 
    ), 
    (int) 1 => array(
     'Category' => array(
      'category_id' => '3', 
      'category_name' => 'Category 2', 
      'category_index' => '2', 
      'project_id' => '1' 
     ), 
     'Project' => array(
      'project_id' => '1', 
      'project_name' => '131 Anndale Dr', 
      'project_sqft' => '1700', 
      'project_cost' => '318', 
      'project_cost_per_sqft' => '0' 
     ), 
     'Expense' => array(
      (int) 0 => array(
       'expense_id' => '3', 
       'expense_name' => 'Bed', 
       'category_id' => '3', 
       'dollar_amount' => '99', 
       'sqft_amount' => '2', 
       'expense_index' => '1' 
      ), 
      (int) 1 => array(
       'expense_id' => '4', 
       'expense_name' => 'Chair', 
       'category_id' => '3', 
       'dollar_amount' => '70', 
       'sqft_amount' => '1', 
       'expense_index' => '2' 
      ) 
     ) 
    ) 
) 

어떤 도움을 크게 감상 할 수있다. 감사!!

답변

3

동시에, 나는 거의 똑같은 일을 오늘하고 있습니다.

양식을 자동으로 채우려면보기에 데이터가 $this->data이어야합니다. 컨트롤러에서 $this->request->data에 할당하여이 작업을 수행 할 수 있습니다.

그런 다음 필드 이름에 해당 배열의 구조가 정확하게 반영되어야합니다. 그래서 예를 사용하여, 당신은 할 수 있습니다 당신의 비용 필드

echo $this->Form->input("$i.Category.category_name"); 
카테고리 필드

echo $this->Form->input("$i.Expense.$j.expense_id"); 

합니다.

+0

이 도움에 감사드립니다. 그것은 완벽하게 작동했습니다. – user2887380