Создать элементы управления для сводной таблицы - PullRequest
0 голосов
/ 08 января 2019

Я хотел бы перебрать и отредактировать данные из сводной таблицы в edit.ctp.

Отображение и редактирование одного объекта отлично работает с кодом ниже (если есть хотя бы одна запись):

edit.ctp

echo $this->Form->control('winkels.0._joinData.winkel_id', [
      'options' => $winkels,
      'label' => 'Winkel',
      'type' => 'select'
]);
echo $this->Form->control('winkels.0._joinData.url');
echo $this->Form->control('winkels.0._joinData.prijs');

Я мог бы получить глубину массива и изменить индекс winkels, но это просто грязно ... Я даже не уверен, сработает ли это.

Итак, я попробовал код ниже, но он не создает правильный HTML:

if(!empty($product->winkels)) {
    foreach ($product->winkels as $winkel) {
        echo $this->Form->control($winkel->_joinData->winkel_id, [
            'options' => $winkels,
            'label' => 'Winkel',
            'type' => 'select'
        ]);
        echo $this->Form->control($winkel->_joinData->url, [
            'label' => 'URL', 
            'value' => $winkel->_joinData->url
        ]);
        echo $this->Form->control($winkel->_joinData->prijs, [
            'label' => 'Prijs', 
             'value' => $winkel->_joinData->prijs
        ]); 
    }

}

Есть ли чистый способ создания этих элементов управления для сводной таблицы? Также, если $product->winkels пусто, как мне сделать первую запись?

Дополнительная информация:

screenshot

--- РЕДАКТИРОВАТЬ ---

Я изменил свой код, но мне кажется, что он не может создать «сводную таблицу»

if(!empty($product->winkels)) {
    foreach ($product->winkels as $index => $winkel) {
        echo $this->Form->control('winkels.$index.winkel_id');
        echo $this->Form->control('winkels.$index._joinData.winkel_id', [
            'options' => $winkels,
            'label' => 'Winkel',
            'type' => 'select'
        ]);
        echo $this->Form->control('winkels.$index.url', [
            'value' => $winkel->_joinData->url]
        );
        echo $this->Form->control('winkels.$index.prijs', [
            'value' => $winkel->_joinData->prijs]
        ); 
    }
} else {
    echo $this->Form->control('winkels.0.winkel_id');
    echo $this->Form->control('winkels.0._joinData.winkel_id', [
        'options' => $winkels,
        'label' => 'Winkel',
        'type' => 'select'
    ]);
    echo $this->Form->control('winkels.0._joinData.url');
    echo $this->Form->control('winkels.0._joinData.prijs');
}

Как видно из результата отладки, большая часть структуры отсутствует:

debug

1 Ответ

0 голосов
/ 08 января 2019

Нет ничего грязного в использовании индекса массива, это именно то, как вы это сделаете, то есть что-то вроде:

foreach ($product->winkels as $index => $winkel) {
    echo $this->Form->control("winkels.$index.id");
    echo $this->Form->control("winkels.$index._joinData.winkel_id", [/* ... */]);
    echo $this->Form->control("winkels.$index._joinData.url", [/* ... */]);
    echo $this->Form->control("winkels.$index._joinData.prijs", [/* ... */]);
}

Также не забывайте первичный ключ, если вы хотите обновить существующие записи! И обратите внимание, что вам не нужно предоставлять значение, помощник формы найдет само значение на основе заданного имени поля.

А если winkels пусто, то вы просто начинаете с индекса 0, как в первом примере.

Смотри также

...